【发布时间】:2015-07-02 08:11:33
【问题描述】:
我有一个用于提交 GET 请求的 Django 表单。该视图采用表单输入并将其用作参数来过滤查询集以生成搜索结果列表。我需要在其中一个字段的选项顶部添加空白和无选项。我希望空白值表示“不过滤此字段”。我希望 None 值表示“过滤此字段以使其处于空白状态”。我遇到的问题是,在我的表单进行过滤的方法中,我需要检查该值是否真实(以便空白提交不进行过滤),并且我需要将字符串 'None' 显式转换为''。
如何编写此代码以区分选择不应过滤的值和显式查询 ''?
class MyFilterForm(forms.Form):
is_open = forms.BooleanField(required=False)
STATUS_CHOICES = (
('A', 'A'),
('B', 'B'),
('C', 'C'),
)
status = forms.ChoiceField(
choices=(('', 'All'),
('None', 'None')) + STATUS_CHOICES,
required=False)
def filter_qs(self, qs):
for key, value in self.cleaned_data.items():
# Check for truthiness so that '' means do not filter
if value:
# Special treatment of 'None'
# Convert 'None' to ''
if value == 'None':
value = ''
qs = qs.filter(**{key: value})
return qs
【问题讨论】:
-
你能指出你的代码在哪里没有达到你想要的条件吗?
-
它不会失败。我正在寻找一种更简洁的方法来实现将表单输入传递给不涉及特殊 if 语句的查询集。
标签: python django django-forms