Python 将模型用户设置为request.user并在Django中使用CreateView返回“author\u id列中的空值”错误

Python 将模型用户设置为request.user并在Django中使用CreateView返回“author\u id列中的空值”错误,python,django,forms,model,Python,Django,Forms,Model,我有一个在ModelForm上运行的CreateView,它是ModelItem.Item.author=ForeignKeyUser的子类,在_delete=models.CASCADE上 在CreateView中,用户填写了表单的大部分内容,但我希望Item.author设置为request.user。每当我这样做时,使用form\u valid设置form.instance.author=self.request.user,我都会返回一个错误,即author\u id列中的null值违反了

我有一个在ModelForm上运行的CreateView,它是ModelItem.Item.author=ForeignKeyUser的子类,在_delete=models.CASCADE上

在CreateView中,用户填写了表单的大部分内容,但我希望Item.author设置为request.user。每当我这样做时,使用form\u valid设置form.instance.author=self.request.user,我都会返回一个错误,即author\u id列中的null值违反了非null约束

我已尝试从form.py中删除“author”作为要编辑的字段

这就是我试图复制的内容:

Model.py

类Itemmodels。模型: 其他一些渲染和保存精细的字段 作者=models.ForeignKeyUser, 在_delete=models.CASCADE上, def get_absolute_urlself: 返回反向'item_detail',args=[strself.id] forms.py

类submitItemForms.ModelForm: 类元: 型号=项目 字段=‘链接’、‘标题’、‘摘录’、‘类型’、‘作者’ 定义初始自我,*args,**kwargs: superSubmitItemForm,self.\u init\u*args,**kwargs self.helper=FormHelperself self.helper.form\u id='submit\u item' self.helper.form_class='submit' self.helper.form_方法='post' self.helper.form_action='item_detail' self.helper.add_inputSubmit'submit',submit' views.py

类SubmitItemLoginRequiredMixin,generic.CreateView: login_url='/login/' 重定向\u字段\u名称='item\u detail.html' form_class=SubmitItemForm 型号=项目 def表单_validself,表单: form.instance.author=self.request.user 返回super.form\u validform def form_invalidself,表格: 响应=super.form\u invalidform 返回响应 我希望表单保存到数据库,并使用项目模型中描述的get_absolute_url方法将浏览器重定向到保存的数据。

您可以更改表单的有效方法,如下所示

    def form_valid(self, form):
        form.instance.author_id = self.request.user.pk
        return super().form_valid(form)


对于任何与这个问题作斗争的人来说——以下是我如何让它工作的。 我没有在上面的代码中包含!!!我在模型上有一个def cleanself方法

“蟒蛇 def cleanself: 所有清洁数据=超级清洁 自救


我删除了这一行,因为我认为这是从上一次迭代中删除的,form_valid负责验证并应用了Anjaneyulu的上述修复,现在模型正确保存。

Hi-感谢您的回复。我刚刚尝试了这一点,但我在列author_id违反not null约束中仍然得到null值输出打印语句并检查它是否正确有没有价值