Python Django表单:在if语句中清理数据

Python Django表单:在if语句中清理数据,python,django,django-forms,Python,Django,Django Forms,我对python和django都是新手,现在我已经为这个表单挣扎了一段时间。我得到的是一个有三个字段的表单。我希望能够将这些字段中的每一个都留空,并且在视图中,我试图根据留空的字段来生成if-elif-else语句。但它在这里出了问题 如果我将字段1留空,则如果我打印它,则a是一个空列表,但在If语句中,a==[]似乎不起作用。它直接跳转到else部分,其中随机函数发生错误,因为它不能在d上使用(这是一个空列表,因为它已使用a进行过滤) 如果我不在表单中留下任何空白字段,一切都正常 我的问题:

我对python和django都是新手,现在我已经为这个表单挣扎了一段时间。我得到的是一个有三个字段的表单。我希望能够将这些字段中的每一个都留空,并且在视图中,我试图根据留空的字段来生成if-elif-else语句。但它在这里出了问题

如果我将字段1留空,则如果我打印它,则a是一个空列表,但在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,
    }
你可以这样做:

if a is None:
    ....

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

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

if not a:

你在这里抽象太多了。field1是什么字段类型?所有字段都是ManyToManyFields。