我正在制定一个推荐计划。它是指一个朋友加入我们的社区。我有一个叫邀请的模型。我用了两种同型号的表格。在第一个表单中,用户必须只填写他/她的电子邮件地址。当他请求邀请时,他/她现在可以向他的/她的朋友介绍。如果被推荐的朋友点击他发送的被推荐的链接,就可以获得积分。你知道吗
我的第一个表单,即邀请函正在工作,但在请求邀请函后,如果他/她试图引用朋友填写他的电子邮件地址和他/她的朋友的电子邮件地址,我会得到一个错误
Cannot assign "abc@gmail.com". "Invitation.friend" must be a "Invitation" instance.
如何将引用的电子邮件地址(朋友)保存到数据库?你知道吗
这是我的型号.py你知道吗
class Invitation(models.Model):
email = models.EmailField(unique=True, verbose_name=_("e-mail Address"))
friend = models.ForeignKey('self', related_name="referral", null=True, blank=True, on_delete=models.CASCADE)
invite_code = models.UUIDField(default=uuid.uuid4, unique=True)
points = models.PositiveIntegerField(default=0)
invite_accepted = models.BooleanField(verbose_name=_('invite accepted'), default=False)
request_approved = models.BooleanField(default=True, verbose_name=_('request accepted'))
表单.py
class ReferForm(forms.Form):
sender_email = forms.EmailField(label=_("Your email"), required=True)
receiver_email = forms.EmailField(label=_("To email"), required=True)
def save(self, sender_email, receiver_email):
print('email', sender_email, receiver_email)
new_join, created = Invitation.objects.get_or_create(email=sender_email)
print ('new_join is', new_join, created)
if created:
return True
return new_join
视图.py
class ReferInvitation(FormView):
template_name = 'refer/refer.html'
form_class = ReferForm
def form_valid(self, form):
sender_email = form.cleaned_data.get('sender_email')
receiver_email = form.cleaned_data.get('receiver_email')
print ('sender_email', sender_email)
print ('friend', receiver_email)
refer_instance = form.save(sender_email, receiver_email)
print ('refer_instance', refer_instance)
refer_instance.friend = receiver_email
refer_instance.invite_code = get_invite_code()
refer_instance.save()
messages.success(self.request, 'You invited {0} successfully'.format(receiver_email))
return HttpResponseRedirect('/')
一个疑问是:当他请求邀请时,发件人的电子邮件已经保存到数据库中。我的方法有效吗?你知道吗
更新
如我所说,邀请模型由两种形式使用。首先,RequestInvitation表单使用它,以便用户可以请求邀请,并且只有该用户可以使用refereform。所以在提交表单时,如果我这样做Invitation.objects.create(email=sender_email, friend=reciever_email)
,我会得到
unique_constraint error on invitation_invitation.email
是的。去处理我想做的事
def save(self, sender_email, receiver_email):
try:
invite_instance = Invitation.objects.get(email=sender_email)
except:
invite_instance = None
if invite_instance:
invite_instance.friend = receiver_email
return invite_instance
return Invitation.objects.create(email=sender_email, friend=receiver_email)
这样,如果我直接去参考表格,填写发件人和收件人的电子邮件,然后它的工作。如果我在请求邀请后转到推荐表并填写推荐表,则“朋友”字段为空。你知道吗
提交表单时,不要将其保存到db,将其设置为false,这样就表示您有更多的事情要处理。你知道吗
这是一个可行的解决方案,主要的变化是模型上使用的FK。你知道吗
模型。你知道吗
形式
查看
从.forms导入refereform 从django.http导入HttpResponseRedirect 从django.views.generic文件.编辑导入窗体视图 从.models导入邀请
相关问题 更多 >
编程相关推荐