2017-07-17 25 views
0

我創造我的形式Form.py這樣的:我想創建Django的表單字段views.py而不是的forms.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="(Choose field)") 
    owner_name = forms.ModelChoiceField(queryset= Field.objects.values_list('name', flat=True), empty_label="(Choose field)") 

但由於像「自我」某些原因無法使用在form.py中。我只能在views.py中訪問它。所以我想使它像

class FieldForm(ModelForm): 
    class Meta: 
     model = pdftabel_tool_ 
     fields = (
      'apn', 
      'owner_name',) 

我怎樣才能使這些領域作爲下拉,就像我在我的forms.py?

回答

1

你爲什麼要在views.py中設置它? forms.py是做這件事的適當的地方。

而是重新定義你的領域,你應該使用窗體的__init__方法覆蓋查詢集爲您的領域,像這樣:

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) 
+0

實際上,我在view.py中獲取了self.layer_id。我想要過濾值如「(queryset = Field.objects.filters(map_id = self.layer_id)values_list('name',flat = True)」, – ephemeral

+0

請參閱此問題以瞭解如何將額外參數傳遞給窗體:https:/ /stackoverflow.com/questions/14660037/django-forms-pass-parameter-to-form。 –

+0

哦,對,但經過分析,我在這個form.py與'form'不同的地方來了解'self' .py。所以現在我必須在這裏提交併在view.py中指定drop down淹沒查詢嗎?您可以在此指導嗎? – ephemeral

相關問題