2015-02-25 3 views
6

Meine wenn Statement geht immer an die Else, auch wenn der boolesche Wert sich ändert? Arbeiten in Django 1.6.5django Ansichten wenn Anweisung nicht mit einem boolean funktioniert

views.py

def awaiting_email_confirmation(request): 
    confirmed = EmailConfirmed.objects.get(user=request.user) 
    print confirmed 
    if confirmed is False: 
     print "if" 
     template = 'accounts/email_confirmation.html' 
     context = {} 
     return render(request, template, context) 
    else: 
     print "else" 
     return HttpResponseRedirect(reverse("dashboard")) 

Meine Konsole

True 
else 

False 
else 

druckt Das ist mein model.py für E-Mail-

bestätigt
class EmailConfirmed(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    activation_key = models.CharField(max_length=200) 
    confirmed = models.BooleanField(default=False) 

    def __unicode__(self): 
     return str(self.confirmed) 
+0

EmailConfirmed ist eine Modellinstanz. Hat es vielleicht ein boolesches Attribut, gegen das Sie testen möchten? Zum Beispiel 'bestätigt.bestätigt'? –

+0

Können Sie Ihren Modellcode für die Klasse "EmailConfirmed" veröffentlichen? – Selcuk

+0

gepostet mein Modell – UK2AU

Antwort

2

Ihre print Anweisung zeigt True oder False, weil Sie die Zeichenfolgendarstellung eines booleschen Wertes in Ihrem str Override zurückgeben. Mit anderen Worten, Sie drucken die Zeichenfolgen "True" oder "False". Das eigentliche boolesche Feld confirmed ist ein Feld in Ihrem Modell. Sie sollten sich ändern, wenn Bedingung:

if not confirmed.confirmed: 
    ... 

By the way, kann es eine bessere Idee sein get_object_or_404 Methode zu verwenden, statt get() eine 404-Seite anstelle eines Server-Fehler zurück, wenn keine EmailConfirmed Objekte gefunden werden konnte:

from django.shortcuts import get_object_or_404 
... 
def awaiting_email_confirmation(request): 
    confirmed = get_object_or_404(EmailConfirmed, user=request.user) 
    if not confirmed.confirmed: 
     ... 
1

angepasst ich den Code aus catavaran & Selcuk.

view.py:

from django.shortcuts import get_object_or_404 

def awaiting_email_confirmation(request): 
confirmed = get_object_or_404(EmailConfirmed, user=request.user) 
if not confirmed.confirmed: 
    template = 'accounts/email_confirmation.html' 
    context = {} 
    return render(request, template, context) 
else: 
    return HttpResponseRedirect(reverse("dashboard")) 

Dies wird nun mit meinen Testfällen arbeiten.

Verwandte Themen