Django表单:在if语句中使用清理后的数据
我刚接触Python和Django,现在在处理一个表单时遇到了一些困难。这个表单有三个字段,我希望每个字段都可以留空。在视图中,我想根据哪些字段留空来写一个if-elif-else的判断语句,但在这里出现了问题。
如果我把第一个字段留空,变量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,
}
2 个回答
1
你可以这样做:
if a is None:
....
1
你在检查变量a是否是一个空列表。但这样检查永远不会成立:对于一个ModelMultipleChoiceField(这是为ManyToManyField创建的字段),它的空值是一个空的查询集——你可以查看文档了解更多。
相反,你可以直接使用布尔值比较:
if not a: