【问题标题】:If statement always returning true in django如果语句在 Django 中总是返回 true
【发布时间】:2023-03-11 17:30:01
【问题描述】:

我的 if 语句有问题,因为它总是返回 True。

我有一个表单,用户可以在其中更改他的个人资料信息。现在我想在他尝试输入一个已经存在的电子邮件地址时显示错误消息,而且当他没有更改他当前的电子邮件地址但他更改了他的名字时,例如,我希望只更改名称。我使用的代码是:

def profil_update(request, slug=None):

    instance = get_object_or_404(Guest, slug=slug)
    form = UpdateGuestProfileForm(request.POST or None, request.FILES or None, instance=instance)
    if form.is_valid():
        print (str(request.POST['email'] == instance.email))

        if not request.POST['email'] == instance.email and Guest.objects.filter(email = request.POST['email']).exists():
            messages.error(request, 'That email address is already taken.', extra_tags='email_exists')
        else:
            instance = form.save(commit = False)
            instance.save()
            messages.success(request, "Success", extra_tags='profile_updated')
            return HttpResponseRedirect(instance.get_absolute_url())

    context = {
        "guest": instance,
        "form": form
    }

    return render(request, "base_profile_guest.html", context)

所以,我认为问题在于“request.POST['email'] == instance.get_email()”始终为真。我尝试了一切,它总是正确的。即使电子邮件地址不相等,它也始终是正确的。

【问题讨论】:

    标签: python django database forms if-statement


    【解决方案1】:

    在你看来没有必要这样做,除非这只是一个学习练习,你可以在模型上设置它来强制使用唯一的电子邮件:

     Guest(models.Model):
    
          ....
          email = models.EmailField(..., unique=True, ...)
          ....
    

    【讨论】:

    • 是的,我现在这样做了,它正在工作,但它没有向用户显示消息,为什么它不能保存他的更改,我该怎么做?
    【解决方案2】:

    感谢 Slayer,我解决了。这是我所做的:

    def profil_update(request, slug=None):
    
        instance = get_object_or_404(Guest, slug=slug)
        form = UpdateGuestProfileForm(request.POST or None, request.FILES or None, instance=instance)
        if form.is_valid():
            instance = form.save(commit = False)
            instance.save()
            messages.success(request, "Success", extra_tags='profile_updated')
            return HttpResponseRedirect(instance.get_absolute_url())
        else:
            messages.error(request, 'Email address alredy exists.', extra_tags='email_exists')
        context = {
            "guest": instance,
            "form": form
        }
    
        return render(request, "base_profile_guest.html", context) 
    

    所以,正如 Slayer 所说,我在模型数据中添加了“unique = True”。如果表单无效,我只会写一条错误消息。答案一直都在那里,但我做不到,是我的错误。

    【讨论】:

      猜你喜欢
      • 2016-01-04
      • 2015-12-16
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      相关资源
      最近更新 更多