2014-07-15 58 views
2

我是python和django的新手,現在我一直在用這種表單掙扎一段時間。我得到的是一個有三個領域的表格。我希望它有可能離開這些領域的每一個空白,並在視圖中,我試圖做一個if-elif-else語句取決於哪些字段留空。但它在這裏出錯了。Django表單:清除if語句中的數據

如果我離開field1空白a是一個空列表,如果我打印它,但在if語句中== == []似乎不計算。它直接跳轉到隨機函數發生錯誤的else部分,因爲它不能在d上使用(這是一個空列表,因爲它已經被a過濾了)。

如果我不在表單中留下任何字段,一切正常。

我的問題: 是不是可以做的如果清潔數據的聲明或我只是做這一切都是錯的?爲什麼不「如果一個== []」數?

以下是部分代碼的外觀。視圖:

def SomeFunction(request): 
    if request.method == 'POST': 
    form = SomeForm(request.POST) 
    if form.is_valid(): 
     a = form.cleaned_data['field1'] 
     b = form.cleaned_data['field2'] 
     c = form.cleaned_data['field3'] 

     form = form.save() 

     if a == []: 
      d = Model2.objects.filter(Model2field2=b, Model2field3=c).distinct() 
      e = random.choice(d) 
      return render(request, 'SomePage.html', { 
       'e' : e 
      }) 

     #Here I have some similar elif statements.. 

     else: 
      d = Model2.objects.filter(Model2field1=a, Model2field2=b, Model2field3=c).distinct() 
      e = random.choice(d) 
      return render(request, 'SomePage.html', { 
       'e' : e 
      }) 

形式:

class SomeForm(forms.ModelForm): 
    class Meta: 
    model = Model1 
    fields = ['field1', 'field2', 'field3'] 
    widgets = { 
     'field1' : forms.CheckboxSelectMultiple, 
     'field2' : forms.CheckboxSelectMultiple, 
     'field3' : forms.CheckboxSelectMultiple, 
    } 
+0

你抽象太多了這裏。 field1是什麼類型的字段? –

+0

所有的字段都是ManyToManyFields。 – xdna

回答

1

你檢查,如果是,具體而言,一個空列表。但是這絕不會是事實:ModelMultipleChoiceField(它是爲ManyToManyField創建的字段)的空值是空的查詢集 - 請參閱the documentation

相反,只使用一個布爾比較:

if not a: 
1

你可以這樣做:

if a is None: 
    .... 
+0

謝謝你的回答。我只是試過,但我得到了同樣的結果.. – xdna