django中的外键字段不保存初始化值

时间:2015-10-01 07:18:58

标签: python django

我有一个带有外键字段的表单。该字段已禁用,我使用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'}))

为什么我禁用字段,外键字段,服务器不接受该值。即使进行初始化,发布时也会提交空白值。

2 个答案:

答案 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数据启动它的空白表单。

希望有所帮助!