2017-07-18 62 views
1

我在窗體中使用Django窗體我需要一個名爲'layer_id'的views.py變量。所以,我把它像將變量從view.py導入到。沒有下拉菜單出現

self.form = labelModelForm(layer_id=self.layer.id) 

和forms.py使用像

class labelModelForm(forms.ModelForm): 
    model = Labels_tool_ 
    def __init__(self, *args , **kwargs): 
     layer_id = kwargs['layer_id'] 
     apn= forms.ModelChoiceField(queryset=Field.objects.filter(layer=layer_id).values_list('name', flat=True) ,empty_label="(Choose field)") 

所以,現在當我運行程序沒有下拉列表中出現。我錯在哪裏?作爲layer_id我得到正確的形式view.py

My View.py file is 
def ImportLabelView(self): 
    urlItems =self.request.path.split('/') 
    i = urlItems.index('layers') 
    self.form = labelModelForm(layer_id=self.layer.id) 
    if self.request.method == 'POST': 
     self.layer = Layer.objects.filter(id=urlItems[i + 1],map=self.map.id).first() 
     layerid= self.layer.id 
     labmapid=self.map.id 
     OwnerName = self.request.POST.get('owner_name') 
     MailingAddrOne = self.request.POST.get('mailing_addr_One') 
     mailingaddrTwo = self.request.POST.get('mailing_addr_Two') 
     ApN = self.request.POST.get('apn') 
     situsaddrTwo = self.request.POST.get('situs_addr_Two') 
     situsaddrOne = self.request.POST.get('situs_addr_One') 
     if Labels_tool_.objects.filter(map_id_labels=labmapid ,layer_id_labels=layerid).exists(): 
      Labels_tool_.apn = Labels_tool_.objects.filter(map_id_labels = labmapid , layer_id_labels = layerid).update(apn=ApN) 
      Labels_tool_.owner_name = Labels_tool_.objects.filter(map_id_labels=labmapid, layer_id_labels=layerid).update(owner_name=OwnerName) 
      Labels_tool_.mailing_addr_One = Labels_tool_.objects.filter(map_id_labels=labmapid, 
                    layer_id_labels=layerid).update(mailing_addr_One=MailingAddrOne) 
      Labels_tool_.mailing_addr_Two = Labels_tool_.objects.filter(map_id_labels=labmapid, 
                    layer_id_labels=layerid).update(mailing_addr_Two=mailingaddrTwo) 
      Labels_tool_.situs_addr_One = Labels_tool_.objects.filter(map_id_labels=labmapid, layer_id_labels=layerid).update(situs_addr_One=situsaddrOne) 
      Labels_tool_.situs_addr_Two = Labels_tool_.objects.filter(map_id_labels=labmapid, layer_id_labels=layerid).update(situs_addr_Two=situsaddrTwo) 
     else: 
      labels_tool = Labels_tool_() 
      labels_tool.apn    = self.request.POST.get('apn') 
      labels_tool.owner_name  = self.request.POST.get('owner_name') 
      labels_tool.mailing_addr_One= self.request.POST.get('mailing_addr_One') 
      labels_tool.mailing_addr_Two= self.request.POST.get('mailing_addr_Two') 
      labels_tool.situs_addr_One = self.request.POST.get('situs_addr_One') 
      labels_tool.situs_addr_Two = self.request.POST.get('situs_addr_Two') 
      labels_tool.map_id_labels = self.map.id 
      labels_tool.layer_id_labels = self.layer.id 
      labels_tool.save() 
      # self.form = self.layer.form(self.request.POST) 

     return self.redirect('mapport.maps.layers.importlabel', self.map.id, self.layer.id) 
    return self.render('mapport/maps/layers/Labels_detail.html') 

而且模板文件是

<form action="" method="post" id="label_form">{% csrf_token %} 
<div id="field1"><p id="apn_text">APN: </p> {{ form.apn}}</div> 

款都喜歡

class pdftabel_tool_(models.Model): 

    apn = models.CharField(null=True, blank=False, max_length=255) 

現在在哪兒,我會犯錯,從價值view.py是正確的,但不顯示下拉菜單?

+0

從形式__init__我可以看到你還沒有使用layered_id在任何地方,所以你實際採取了什麼? – Exprator

+0

@Exprator抱歉忘記寫querystring我已更新。請檢查 – ephemeral

回答

1

您需要設置self.fields而不是self.initial

您應該在類級別以正常方式定義字段,然後在init方法中修改queryset。

class labelModelForm(forms.ModelForm): 
    apn = forms.ModelChoiceField(queryset=Field.objects.none()) 

    def __init__(self, *args, **kwargs): 
     layer_id = kwargs.pop('layer_id', None) 
     super(labelModelForm, self).__init__(*args, **kwargs) 
     self.fields['apn'].queryset = Field.objects.filter(layer=layer_id) 
+0

仍然出現此錯誤「__init __()有一個意外的關鍵字參數'layer_id'」 – ephemeral

+0

請在您的問題更新中顯示完整視圖和完整回溯。 –

+0

我上傳了全視圖 – ephemeral