Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何区分具有查找功能的用户_Python_Django_One To One - Fatal编程技术网

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
,内置了django
User
。当我进入一个页面时,我试图确定它是哪个
用户。我所做的不起作用,因为
用户
模型在具有
餐厅
属性时总是返回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就无法区分餐厅用户和客户用户。