Django给了IntegrityError,用户id不是空的,不知道为什么

2024-09-28 22:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个用于发送电子邮件以更改用户条目的电子邮件的ammodelform,由于某些原因,当我单击表单上的submit时,它会给我access_emailchangeauth.user_id may not be NULL。我不知道为什么。在

代码在下面

def changeEmail(request):
    data = request.POST if request.method == 'POST' else None
    if data:
        form = ChangeEmailForm(data)
        if form.is_valid():
            form.save(user=request.user)
        else:
            a = request.user
            a = u.objects.get(username__iexact=a)
            form = UserModificationForm(instance=a)
            form2 = ChangeEmailForm()
            return render('accounts/modify.html',{'form': form, 'form2': form2, 'usr': a})

#forms.py
class ChangeEmailForm(ModelForm):
    class Meta:
        model = EmailChangeAuth
        fields = ['new_email']

    def save(self, *args, **kwargs):
        user = kwargs.pop('user')
        self.user = user
        print user
        super(ChangeEmailForm, self).save(*args, **kwargs)
#models.py

class EmailChangeAuth(models.Model):
    auth_code = UUIDField(auto=True, unique=True)
    user = models.ForeignKey(u)
    new_email = models.EmailField(max_length=256)

    def __unicode__(self):
        return unicode(self.auth_code)

Tags: selfformdataifmodels电子邮件requestsave
1条回答
网友
1楼 · 发布于 2024-09-28 22:34:36

由于字段列表中没有包含user,因此不会将其传递给ModelForm的实例构造函数。在

因此,您希望在这里更改表单实例的user属性,而不是表单对象本身的属性。在.save()中,更改自身用户到self.instance.user. 那应该能让你走了。在

但是,我还想建议这种机制通常是一种反模式:如果用户填充的是必需字段,为什么不允许用户成为模型表单上的字段?在

相关问题 更多 >