Python Django ModelChoiceField,动态查询集验证

Python Django ModelChoiceField,动态查询集验证,python,django,python-2.7,django-forms,Python,Django,Python 2.7,Django Forms,我现在有这个表格: class PersonForm(forms.Form): article = forms.CharField(required=False) workshop = forms.ModelChoiceField(queryset=Program.objects.none(),

我现在有这个表格:

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',))
用于检索所有车间的queryset是动态的,因此ModelChoiceField中的queryset属性设置为
Program.objects.none()
,而动态queryset是在表单的
\uUuInit\uUuU
方法中完成的

一切正常:在select(选择)中为
workshop
显示的所有值均正常。但是当我发布表单时,出现了一个验证错误:
“请选择一个有效的选项。此选项不在可用选项中。“


有什么我遗漏的吗

根据post时实例化表单的代码,
initial
可能无法传递。你可以试试:

article = self.initial.get('article', None) or self.data.get('article', None)

这将从表单POST数据中获取pk。

根据POST时实例化表单的代码,
initial
可能无法传递。你可以试试:

article = self.initial.get('article', None) or self.data.get('article', None)

这将从您的表单发布数据中获取pk。

请显示您的视图。请显示您的视图。