无法在方法中分配字段form_valid非空约束错误



我得到错误:

/projects/1/issues/new处的IntegrityError/NOT NULL约束失败:issues_issue.project_id请求方式:POST请求URL:http://127.0.0.1:8000/projects/1/issues/new/Django版本:3.0.3异常类型:IntegrityError异常值:
NOT NULL约束失败:issues_issue.project_id

Issues有一个外键要项目,我在form_valid方法中分配它,我对用户也这样做,这很好

在视图中创建视图.py:

class IssueCreateView(LoginRequiredMixin, CreateView):
        model = Issue
        fields = ['title', 'details', 'priority', 'status', 'estimated_work_hours', 'loaded_work_hours']
        def form_valid(self, form):
            form.instance.project = get_object_or_404(Project, pk=self.kwargs['project_id'])
            print(form.instance.project)
            form.instance.creator = self.request.user
            return super().form_valid(form)

print(form.instance.project)打印正确的项目,所以这是有效的。

models.py:

class Issue(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    creator = models.ForeignKey(User, related_name="%(class)ss_created", on_delete=models.CASCADE)
    ...
    ...

为什么我可以在form_valid方法中将创建者字段分配给用户,但当我对Project字段做同样的事情时,它不起作用,我不理解。

有人知道问题出在哪里吗?

感谢

您的表单不支持实例中的projectcreator。如果你只设置form.instance.xyz = self.request.user ,它几乎是一样的

因此,您必须将projectcreator添加到字段中。

如果您使用{{ form.as_p }},您将遇到下一个问题,即这些字段包含在表单中。有多种方法可以处理此问题。一种是将它们隐藏在自定义表单中。最终结果是:

from django import forms
class IssueForm(forms.ModelForm):
    class Meta:
        model = Issue
        fields = ['project', 'creator', 'title', 'details', 'priority', 'status', 'estimated_work_hours', 'loaded_work_hours']
        widgets = {
            'project': forms.HiddenInput(),
            'creator': forms.HiddenInput(),
        }
class IssueCreateView(LoginRequiredMixin, CreateView):
    model = Issue
    form_class = IssueForm
    def form_valid(self, form):
        form.instance.project = get_object_or_404(Project, pk=self.kwargs['project_id'])
        form.instance.creator = self.request.user
        return super().form_valid(form)

相关内容

最新更新