簡體   English   中英

Django給出IntergrityError,user.id不為null,不知道為什么

[英]Django gives IntergrityError, user.id NOT null, don't know why

我正在嘗試創建一個用於發送電子郵件以更改用戶條目中的電子郵件的access_emailchangeauth.user_id may not be NULL ,由於某種原因,當我單擊表單上的access_emailchangeauth.user_id may not be NULL時,它會給我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)

由於您沒有將用戶包括在字段列表中,因此不會將其傳遞給ModelForm的實例構造函數。

因此,您想要的是更改表單實例的用戶屬性,而不是表單對象本身的屬性。 在.save()中,將self.user更改為self.instance.user。 那應該讓你走。

但是,我還想建議這種機制通常是一種反模式:為什么無論如何,如果您要填充的是必填字段,為什么不允許用戶成為ModelForm上的字段?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM