2017-07-28 1 views
-1

Ich habe zwei Klassen Customer und Restaurant, die OneToOneField mit dem Django in User eingebaut haben. Wenn ich auf eine Seite gehe, versuche ich herauszufinden, welches User es ist. Was ich nicht funktioniert tue, weil das User Modell wird immer wahr zurückgeben restaurant Attribut für hat, so macht es nie über die erste if Aussage ...Wie kann ich zwischen Benutzern mit Nachschlagen unterscheiden

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

Sie sollten ein Flag- oder Statusfeld oder Rollenfeld festlegen, das beschreibt, welcher Benutzertyp in Ihrem 'CustomUser'-Modell beschrieben wird. Dann können Sie ohne Komplikationen zwischen den beiden unterscheiden. Ohne dies unterscheidet Django nicht zwischen einem Restaurantbenutzer und einem Kundenbenutzer. – zaidfazil

Antwort

0

Ihre Ansicht Datei auf dem User Modell das restaurant Attribut prüft und nicht die Instanz, das nicht ist, wie Sie Modelle in Django verwenden, re bitte Ad die Dokumentation auf Django's ORM für die korrekte Verwendung. Sie können auf den authentifizierten Benutzer von der Anfrage mit request.user zugreifen. Sie lesen Sie die Dokumentation auf Djangos OneToOneField und ORM Stellen Sie sicher,

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') 

: Sie sollten so etwas wie zu tun. Wenn Sie auf die One-to-one relationship documentation beziehen würden Sie lesen:

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

Hier gibt es kein Restaurant.

Sie auch hasattr verwenden können, die Notwendigkeit Ausnahme einklemmen:

hasattr(p2, 'restaurant') 

falsch sein sollte

Eines dieser zwei Beispiel, wie Sie für die restaurant fehlt überprüfen Ihr Benutzer.

+0

Ich habe request.user für eine Weile ohne Glück versucht. Ich bekomme immer noch einen Fehler mit dieser Methode: 'Exception Value: Benutzer hat kein Restaurant.' – ratrace123

Verwandte Themen