如果电子邮件存在,则重定向到其他表单

时间:2017-03-18 01:39:15

标签: python django django-forms django-views django-1.9

我想实现一个邀请功能,用户将填写电子邮件地址,他们的电子邮件将保存到数据库中。如果他们再次填写电子邮件地址和邀请请求,他们应该被重定向到另一个表格(ReferForm),以便他们可以推荐其他。

这是我的代码

class InviteForm(forms.Form):
    email = forms.EmailField(label=_("E-mail"), required=True)

    def save(self, email):
        print('email', email)
        print ('############')
        if (Invitation.objects.get(email=email)):
            return True
        invitation = Invitation.objects.create(email=email)
        return invitation

class RequestInvitation(FormView):
    template_name = 'home.html'
    form_class = InviteForm

    def form_valid(self, form):
        email = form.cleaned_data.get('email')
        invite_instance = form.save(email)
        if invite_instance == True:
            return HttpResponseRedirect('/refer-form')
        invite_instance.invited_by_email_address = self.request.user
        invite_instance.custom_invite_code = get_custom_invite_code()
        invite_instance.save()
        messages.success(self.request, '{0} has been invited'.format(email))
        return HttpResponseRedirect('/')

    def form_invalid(self, form):
        # messages.error(self.request, '{0}'.format(form.errors))
        return self.render_to_response(self.get_context_data(form=form))

我在表单保存功能中遇到错误,我查询了电子邮件的存在。但是我收到了错误

  

邀请匹配查询不存在。

2 个答案:

答案 0 :(得分:1)

使用get_or_create

invitation, created = Invitation.objects.get_or_create(email=email)
return invitation if created else True

答案 1 :(得分:0)

我可以解决它,但这是最好的方法吗?

class InviteForm(forms.Form):
    email = forms.EmailField(label=_("E-mail"), required=True)

    def save(self, email):
        try:
            invitation = Invitation.objects.get(email=email)
            return None
        except Invitation.DoesNotExist:
            invitation = Invitation.objects.create(email=email)
            return invitation


def form_valid(self, form):
      email = form.cleaned_data.get('email')
      invite_instance = form.save(email)
      if invite_instance is None:
          return HttpResponseRedirect('/invitations/refer-invitation')
      invite_instance.invited_by_email_address = self.request.user
      invite_instance.custom_invite_code = get_custom_invite_code()
      invite_instance.save()
      messages.success(self.request, '{0} has been invited'.format(email))
      return HttpResponseRedirect('/')