2014-07-15 18 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