错误:
null value in column "postal_code_id" violates not-null constraint
表格:
def add(request):
if request.method == 'POST':
address_form = AddressForm(request.POST)
company_form = CompanyForm(request.POST)
if address_form.is_valid() and company_form.is_valid():
print address_form.cleaned_data['postal_code'] # <-- prints (<PostalCode: V4N 1K6>, False)
address_form.save() # <------------------------------- occurs here
else:
print 'Address errors',address_form.errors
print 'Company errors', company_form.errors
else:
address_form = AddressForm()
company_form = CompanyForm()
return render(request, 'company/add.html', locals())
显然,表单确实有一个有效的PostalCode
对象,所以我不知道它为什么说它违反了notnull约束。当然,我对表格做了一些有趣的事情:
具体来说,我用文本字段替换postal_code
字段,然后在“clean”方法中找到/创建对象。为什么这让Django感到困惑?它最终得到了它需要的东西,不是吗?在
您排除了
postal_code
,这将导致模型表单稍后在保存尝试期间跳过该字段。我也遇到过类似的问题,必须通过django代码来找出行为。顺便说一下,这是值得的。在相反,您要做的是设置用于邮政编码字段的小部件,而不是排除然后包括。在
这将允许modelform正确验证字段并保存它。为了简洁起见,我把你剩下的表格删去了。在
编辑:
在ModelForm中,尝试使用CharField作为ForeignKey是非常可怕的。相反,将其转换为常规形式。您似乎已经定义了大部分字段。然后依靠您来验证字段是否有效,并且已经是数据库的成员。创建一个行为类似于ModelForm保存方法的save方法,然后就可以开始了。在
我提出这个问题是因为我试图在保存表单之前自动向表单数据添加一个
uploaded_by
字段。我使用的是ModelForm
,排除了uploaded_by
。我发现对related stackoverflow question的回答是对这个问题的简洁解决方案。在我不知道Django,但也许你必须确保在保存地址之前保存了邮政编码?在
相关问题 更多 >
编程相关推荐