2017-03-18 3 views
0

ユーザーがメールアドレスを記入し、メールがデータベースに保存される招待機能を実装したいと考えています。彼らが再度電子メールアドレスを記入して招待状を要求すると、別のフォーム(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)) 

です。しかし、私はエラーが発生します

招待照合クエリは存在しません。

答えて

1

使用get_or_create

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

私はすでにそれをしましたが、私はいつも偽に作成されます。それは私がmodelFormを使用していないためです – pythonBeginner

+0

あなたは電子メールが既にdbに存在する場合にfalseを作成します。 – user3148949

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('/') 
関連する問題