Skip to main content
 首页 » 编程设计

python之Django 表单 : Cleaned data in if statement

2024年10月25日40powertoolsteam

我是 python 和 django 的新手,现在我已经为这种形式苦苦挣扎了一段时间。我得到的是一个包含三个字段的表格。我希望可以将这些字段中的每一个留空,并且在 View 中我试图根据留空的字段来制作 if-elif-else 语句。就是在这里出了问题。

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

如果我不将表单中的任何字段留空,一切正常。

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

请您参考如下方法:

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

相反,只需使用 bool 比较:

if not a: