我有一个带有外键字段的表单。该字段已禁用,我使用initial
初始化了该值。该值显示但是当我提交时,会显示错误:'This field is required'
views.py:
def updateTicket(request, ticket_id):
ticketDetails = editTicket1.objects.filter(ticketID=ticket_id).last()
updateTrouble = editTrouble(request.POST or None, instance=ticketDetails, initial={'ticketID': ticket_id})
if updateTrouble.is_valid():
updateTrouble.save()
forms.py:
ticketID = forms.ModelChoiceField(queryset=tblTicket.objects.all(),widget=forms.Select(attrs={'disabled':'disabled'}))
为什么我禁用字段,外键字段,服务器不接受该值。即使进行初始化,发布时也会提交空白值。
答案 0 :(得分:0)
来自django docs,它为表单字段指出:“默认情况下,每个Field类都假定值是必需的,所以如果你传递一个空值 - None或空字符串(”“) - 那么干净()将引发ValidationError异常:“
所以,你应该这样做; ticketID = forms.ModelChoiceField(必需:False,queryset = tblTicket.objects.all(),widget = forms.Select(attrs = {'disabled':'disabled'}))
或在您的模型中,您已将字段的空白参数设置为False,但我建议您在表单中执行此操作。
答案 1 :(得分:0)
不确定这是否是问题,但我认为您的表单始终会显示ticket_id
,因为initial
表单选项会覆盖instance
。
此处的文档描述如下:https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#providing-initial-values
另外 - 如果你想正确处理表单,我认为你应该扩展update ticket
函数,就像在文档中描述的那样:
https://docs.djangoproject.com/en/1.8/topics/forms/#the-view
上述示例与您的代码之间的差异将在else
语句中,而不是使用您在代码中提供的initial
数据启动它的空白表单。
希望有所帮助!