【问题标题】:redirect to another form if email exists如果存在电子邮件,则重定向到另一个表单
【发布时间】:2017-08-09 17:15:19
【问题描述】:

我想实现一个邀请功能,用户将填写电子邮件地址并将他们的电子邮件保存到数据库中。如果他们再次填写电子邮件地址并请求邀请,他们应该被重定向到另一个表格(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))

我在表单保存功能中收到错误,我已在其中查询电子邮件是否存在。但是我得到一个错误

邀请匹配查询不存在。

【问题讨论】:

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


    【解决方案1】:

    使用get_or_create

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

    【讨论】:

    • 我已经这样做了,但我总是被创建为假的。是不是因为我没有使用modelForm
    【解决方案2】:

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

    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('/')
    

    【讨论】:

      猜你喜欢
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      相关资源
      最近更新 更多