我想实现一个邀请功能,用户将填写电子邮件地址,他们的电子邮件将保存到数据库中。如果他们再次填写电子邮件地址和邀请请求,他们应该被重定向到另一个表格(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))
我在表单保存功能中遇到错误,我查询了电子邮件的存在。但是我收到了错误
邀请匹配查询不存在。
答案 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('/')