python - Django 表单 : Cleaned data in if statement

标签 python django django-forms

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

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

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

我的问题: 是否无法对清理后的数据执行 if 语句,或者我只是做错了?为什么“if a == [ ]”不算数?

以下是部分代码的外观。 View :

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:

关于python - Django 表单 : Cleaned data in if statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24756742/

相关文章:

jquery - AJAX 函数未获取 id

python - 如何使用 Django 功能而不是所有键来索引刚刚选择的 json 键?

django - 基于计数的 ModelForm 订单字段

python - 如何在 Django 中更新 ImageField?

python - 将列表解析为另一个函数参数 - Python

python - 用python拆分多页tiff

mysql - 无需编辑my.cnf即可访问远程MySQL服务器

python - Django中unicode的使用

python - 使用 pandas 的列 View ?

validation - Django 表单 - 处理 GET 请求