2017-07-28 63 views
-1

我有兩個類CustomerRestaurantOneToOneField與django內置在User。當我訪問一個頁面時,我試圖確定它是哪個User。我在做什麼不工作,因爲User模式將始終對具有restaurant屬性返回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') 
+0

您應該在'CustomUser'模型中設置一個標誌或狀態字段或角色字段來描述哪種類型的用戶。然後,你可以區分這兩者之間沒有任何併發​​症。沒有這些,Django就無法區分餐廳用戶和客戶用戶。 – zaidfazil

回答

0

您的視圖文件被檢查的User模型,而不是實例的屬性restaurant,這是不是你在Django使用模型,請重新請在Django's ORM的文檔中提供正確的用法。您可以通過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文檔。如果你指的是One-to-one relationship documentation,你會讀:

from django.core.exceptions import ObjectDoesNotExist 
try: 
    p2.restaurant 
except ObjectDoesNotExist: 
    print("There is no restaurant here.") 

沒有餐廳在這裏。

您還可以使用hasattr以避免異常,需要捕獲:

hasattr(p2, 'restaurant') 

一兩個例子應該是你如何檢查對失蹤restaurant你的用戶。

+0

我正在嘗試request.user一段時間沒有運氣。我仍然得到這個方法的錯誤:'例外值:用戶沒有餐廳.' – ratrace123