Django表单:if语句中的清除数据

时间:2014-07-15 11:14:01

标签: python django django-forms

我是python和django的新手,现在我一直在努力学习这种形式。我得到的是一个有三个字段的表格。我希望可以将每个字段留空并在视图中我试图根据哪些字段留空而制作if-elif-else语句。它在这里出错了。

如果我将field1留空,如果我打印它是一个空列表,但在if语句中,a == []似乎不算数。它直接跳转到随机函数发生错误的else部分,因为它不能在d上使用(这是一个空列表,因为它已经用a过滤了。)

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

我的问题: 是不是可以对清理过的数据做if语句,还是我只是做错了?为什么不“如果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,
    }

2 个答案:

答案 0 :(得分:1)

你可以这样做:

if a is None:
    ....

答案 1 :(得分:1)

您正在检查a是否是一个空列表。但这永远不会成立:ModelMultipleChoiceField的空值(为ManyToManyField创建的字段)是一个空的查询集 - 请参阅the documentation

相反,只需使用布尔比较:

if not a: