django - 无法在 form_valid 方法中分配字段,非空约束错误
问题描述
我收到错误:
/projects/1/issues/new/ NOT NULL 约束处的 IntegrityError 失败: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
问题有一个项目的外键,我在 form_valid 方法中分配它,我对用户做同样的事情,效果很好
在views.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)
打印了正确的项目,因此可以正常工作。
模型.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 字段执行相同操作时,它不起作用,我不明白。
有谁知道可能是什么问题?
谢谢
解决方案
您的表格不尊重您project
的creator
情况。如果您刚刚设置,它几乎相同form.instance.xyz = self.request.user
所以你必须在你的字段中添加project
和。creator
如果您正在使用{{ 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)
推荐阅读
- vue.js - nuxt-i18n:日期本地化对我不起作用
- docker - docker swarm deploy 错误:“池与此地址空间上的其他池重叠” :: portainer on swarm via traefik reverse proxy
- security - 如何修复以下代码行中的堆检查安全漏洞?
- discord.js - 为什么 Button 收集器无法正常工作?
- c++ - 我的 ServerContext::auth_context 始终为 NULL
- powerbi - 根据列表过滤视觉对象?
- vuejs3 - 有没有办法防止 Shape 被转换?
- c++ - 如何在 Drake Toolbox 中设置 IK 轨迹优化?
- javascript - 如何使按钮对对象数组按字母顺序进行排序javascript反应
- node.js - 不允许使用与号 (&) 字符