Python 我想在Django views.py而不是forms.py中创建表单字段
我正在form.py中创建表单,如下所示:Python 我想在Django views.py而不是forms.py中创建表单字段,python,django,forms,django-forms,Python,Django,Forms,Django Forms,我正在form.py中创建表单,如下所示: class pdftabelModelForm(forms.ModelForm): class Meta: model = pdftabel_tool_ fields = ['apn', 'owner_name'] apn = forms.ModelChoiceField(queryset= Field.objects.values_list('name', flat=True), empty_label
class pdftabelModelForm(forms.ModelForm):
class Meta:
model = pdftabel_tool_
fields = ['apn', 'owner_name']
apn = forms.ModelChoiceField(queryset= Field.objects.values_list('name', flat=True), empty_label="(Choose field)")
owner_name = forms.ModelChoiceField(queryset= Field.objects.values_list('name', flat=True), empty_label="(Choose field)")
但由于某些原因,例如form.py中没有“self”。我只能在views.py中访问它。所以我想让它像
class FieldForm(ModelForm):
class Meta:
model = pdftabel_tool_
fields = (
'apn',
'owner_name',)
我怎样才能像在forms.py中那样下拉这些字段?为什么要在views.py中这样做?forms.py是执行此操作的适当位置 与其重新定义字段,不如使用表单的
\uuuuu init\uuuu
方法覆盖字段的查询集,如下所示:
class pdftabelModelForm(forms.ModelForm):
class Meta:
model = pdftabel_tool_
fields = ['apn', 'owner_name']
def __init__(self, *args, **kwargs):
super(pdftabelModelForm, self).__init__(*args, **kwargs)
self.fields['apn'].queryset = X
self.fields['owner_name'].queryset = X
编辑:如果需要向表单传递额外参数,请将init方法更新为:
def __init__(self, *args, **kwargs):
self.layer_id = self.kwargs.pop('layer_id')
super(pdftabelModelForm, self).__init__(*args, **kwargs)
self.fields['apn'].queryset = X
self.fields['owner_name'].queryset = X
从views.py初始化表单时,传递参数:
form = pdftableModelForm(layer_id=X)
实际上,我在view.py中获得了self.layer\u id。我想过滤一些值,比如“(queryset=Field.objects.filters(map\u id=self.layer\u id)values\u list('name',flat=True)”,有关如何将额外参数传递给表单的问题,请参见此问题:。哦,对了。但经过分析,我知道此表单中的“self”。py与该视图中的“form”不同。因此,现在我必须在此处存档,并在view.py中分配drop-crowd查询。请您对此进行指导?