Python 如何区分具有查找功能的用户
我有两个类Python 如何区分具有查找功能的用户,python,django,one-to-one,Python,Django,One To One,我有两个类Customer和Restaurant,它们有OneToOneField,内置了djangoUser。当我进入一个页面时,我试图确定它是哪个用户。我所做的不起作用,因为用户模型在具有餐厅属性时总是返回True,因此它永远不会通过第一个if语句 models.py class Restaurant(models.Model): restaurant_user = models.OneToOneField(User, on_delete=models.CASCADE) re
Customer
和Restaurant
,它们有OneToOneField
,内置了djangoUser
。当我进入一个页面时,我试图确定它是哪个用户。我所做的不起作用,因为用户
模型在具有餐厅
属性时总是返回True,因此它永远不会通过第一个if
语句
models.py
class Restaurant(models.Model):
restaurant_user = models.OneToOneField(User, on_delete=models.CASCADE)
restaurant_name = models.TextField(max_length=50)
about = models.CharField(max_length=500)
class Customer(models.Model):
customer_user = models.OneToOneField(User, on_delete=models.CASCADE)
about = models.CharField(max_length=500)
views.py
def dashboard(request):
if User.restaurant:
return render(request,'usermanage/dashboard_restaurant.html')
elif User.customer is not None:
return redirect(request, 'usermanage/dashboard.html')
else:
return render(request, 'usermanage/dashboard.html')
您的视图文件正在检查用户
模型上的餐厅
属性,而不是实例,这不是您在Django中使用模型的方式,请阅读上的文档以了解正确用法。您可以通过request.user
从请求访问经过身份验证的用户。你应该这样做:
def dashboard(request):
user = request.user
if user and hasattr(user, 'restaurant'):
return render(request,'usermanage/dashboard_restaurant.html')
elif user and hasattr(user, 'customer') is not None:
return redirect(request, 'usermanage/dashboard.html')
else:
return render(request, 'usermanage/dashboard.html')
确保您阅读了Django的OneToOneField和ORM上的文档。如果您参考以下内容:
from django.core.exceptions import ObjectDoesNotExist
try:
p2.restaurant
except ObjectDoesNotExist:
print("There is no restaurant here.")
这里没有餐馆
您还可以使用hasattr来避免异常捕获的需要:
hasattr(p2, 'restaurant')
假的
这两个例子中的一个应该是如何在用户身上检查缺少的餐厅
。我在尝试request.user有一段时间没有运气。此方法仍有错误:异常值:用户没有餐厅。
您应该在CustomUser
模型中设置一个标志或状态字段或角色字段,用于描述哪种类型的用户。然后,您可以在没有任何并发症的情况下区分两者。没有这些,Django就无法区分餐厅用户和客户用户。