【问题标题】:Having issues with Django formsDjango 表单有问题
【发布时间】:2014-06-25 06:05:38
【问题描述】:

我刚开始使用 Django 进行开发,但在使用我创建的表单时遇到了一些问题。

目前我有一个名为 SignUp 的模型,它允许用户通过输入他们的名字和姓氏以及他们的电子邮件地址在网站上“注册”。

我正在尝试实施的一项功能会删除已由提交注册电子邮件地址的用户注册的用户。

我设置了一个表单,它只是一个简单的电子邮件字段,但我似乎无法弄清楚如何让我的视图将表单与用户匹配,然后成功地从数据库中删除用户。

这是表单的代码:

class DeleteUserForm(forms.Form):
    email_address = forms.EmailField()

这是视图的代码:

class DeleteUserView(generic.edit.FormView):
    template_name = 'signups/delete_user_form.html'
    form_class = DeleteUserForm
    success_url = '/users/delete/success/'

    def form_valid(self, form):

        for user in SignUp.objects.all():
            if user.email == form:    # The email attribute holds the user's
                user.delete()         # email address and the form should be
                                      # the address the user submitted to be
                                      # deleted?
                return redirect(self.success_url)

        return redirect('/users/delete/failure/')

每次我尝试提交电子邮件地址时,都没有匹配到,没有用户被删除,我只是被重定向到我的失败目录。

有人知道发生了什么吗? 谢谢

【问题讨论】:

    标签: python django python-2.7 django-models django-forms


    【解决方案1】:

    使用 Kamil 的逻辑,我重写了字段查找并且这段代码有效:

    duplicates = SignUp.objects.filter(email__iexact=form.cleaned_data['email_address'])
        if duplicates:
            duplicates.delete()
            return redirect(self.success_url)
    

    但是有谁知道为什么我之前使用的代码不起作用?

    【讨论】:

    • 它不起作用,因为您将字符串对象(电子邮件地址)与 django 表单实例进行比较。如果您将 user.email == form 替换为 user.email == form.cleaned_data['email'] 会起作用,但上面的解决方案更简洁。
    【解决方案2】:

    最简单的解决方案:

    duplicates = SignUp.objects.filter(email=form.cleaned_data['email_address'])
    
    if duplicates:
        duplicates.delete()
    
        return redirect(self.success_url)
    
    return redirect('/users/delete/failure/')
    

    好的,修复了关系查找。

    【讨论】:

    • 我认为您将字段查找参数与其他内容混淆了,但将其更改为“duplicates =SignUp.objects.filter(email__iexact=form.cleaned_data['email_address'])”符合您的逻辑(我使用 iexact 作为查找类型,因此地址可能不区分大小写)。谢谢。
    【解决方案3】:

    您可以通过form.cleaned_data 字典访问字段值:

    if user.email == form.cleaned_data['email_address']:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2013-06-15
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多