繁体   English   中英

Django形式的外键字段未保存初始化值

[英]Foreign Key field in django form not saving initialized value

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

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

从django文档中,它针对表单字段进行了说明:“默认情况下,每个Field类都假定该值是必需的,因此,如果您传递一个空值– None或空字符串(“”)– clean()将引发ValidationError异常:“

因此,相反,您应该这样做; ticketID = forms.ModelChoiceField(必填:False,queryset = tblTicket.objects.all(),widget = forms.Select(attrs = {'disabled':'disabled'}))

或在您的模型中,您会将字段的空白参数设置为False,但我建议在Form中进行设置。

不确定这是否是问题,但我认为您的表单总是通过显示ticket_id因为这是在覆盖instanceinitial表单选项中提供的。

在文档中对此进行了描述: 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数据代替空白表格来启动它。

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM