2015-02-25 11 views
6

Moje, jeśli ocena zawsze przechodzi do Innego, nawet jeśli wartość boolowska się zmieni? Praca w Django 1.6.5Widoki django, jeśli instrukcja nie działa z boolowskim

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

Moja konsola wypisze

True 
else 

False 
else 

To mój model.py na email potwierdzone

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 jest instancją modelu. Czy ma być może atrybut boolowski, którego testujesz? Na przykład 'confirmed.confirmed'? –

+0

Czy możesz zamieścić swój kod modelu dla klasy 'EmailConfirmed'? – Selcuk

+0

opublikował mój model – UK2AU

Odpowiedz

2

Twój print oświadczenie pokazuje True lub False, ponieważ zwracasz łańcuchową reprezentację wartości logicznej w nadpisaniu str. Innymi słowy, drukujesz łańcuchy "True" lub "False". Rzeczywiste pole logiczne confirmed jest polem w twoim modelu. należy zmienić, jeśli warunek:

if not confirmed.confirmed: 
    ... 

Nawiasem mówiąc, może być lepszym pomysłem jest użycie get_object_or_404 metodę zamiast get() aby powrócić do strony 404 zamiast błędu serwera, kiedy można było znaleźć żadnych EmailConfirmed obiekty:

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

Zaadaptowałem kod z 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")) 

ten pracuje teraz z moich testów.