python - django View if 语句不适用于 boolean 值

标签 python django if-statement boolean

即使 boolean 值发生变化,我的 if 语句总是转到 Else? 在 Django 1.6.5 中工作

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

我的控制台会打印

True
else

False
else

这是我的确认电子邮件的 model.py

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)

最佳答案

你的 print语句显示TrueFalse因为您要在 str 中返回 boolean 值的字符串表示形式覆盖。换句话说,您正在打印字符串“True”或“False”。实际的 boolean 字段 confirmed是您模型中的一个字段。您应该将 if 条件更改为:

if not confirmed.confirmed:
    ...

顺便说一下,使用 get_object_or_404 可能是个更好的主意方法而不是 get()当没有 EmailConfirmed 时返回 404 页面而不是服务器错误可以找到对象:

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:
        ...

关于python - django View if 语句不适用于 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28717962/

相关文章:

django - 如何在 Heroku 上为 Django 应用程序设置数据库?

java - 为什么第一个 if 语句失败?

linux - Bash 脚本如果没有像我预期的那样处理

if-statement - Swift - 'when' 运算符(if 重复吗?)

python - 如何使用 ImageGrid 向颜色栏添加标签?

python - 对 ASCII 文本进行编码

python - ZeroRPC 发布/订阅聚合结果

python - 将字典与行值映射

django - 如何编写用于访问控制的 Django 模板标记?

python - 如何摆脱 Django Form 的 RadioSelect 生成的虚假选择