我有这样的表格:
class PersonForm(forms.Form):
article = forms.CharField(required=False)
workshop = forms.ModelChoiceField(queryset=Program.objects.none(),
empty_label="----",
required=False,
label='Atelier')
def __init__(self, *args, **kwargs):
super(PersonForm, self).__init__(*args, **kwargs)
article = self.initial.get('article', None)
if article:
a = Article.objects.get(pk=article)
if a.workshop:
self.fields['workshop'].queryset = Program.objects.filter(event=a.event, workshop=True)
self.fields['workshop'].required = True
self.helper.layout.insert(4, Row1Field('workshop',))
用于检索所有研讨会的查询集是动态的,因此ModelChoiceField中的queryset属性设置为Program.objects.none()
,动态查询集在表单的__init__
方法
一切正常:select中workshop
显示的所有值都可以。但是当我发布表单时,会出现验证错误:'Select a valid choice. This choice is not among available choices.'
有什么我想念的吗?
答案 0 :(得分:0)
根据发布时实例化表单的代码,可能不会传递initial
。你可以尝试:
article = self.initial.get('article', None) or self.data.get('article', None)
这将从您的表单POST数据中获取pk。