首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区分表示无值的空字符串和表示空值的空字符串

区分表示无值的空字符串和表示空值的空字符串
EN

Stack Overflow用户
提问于 2015-04-24 06:18:26
回答 1查看 74关注 0票数 0

我有一个用来提交GET请求的Django表单。视图接受表单输入,并将其用作参数来过滤查询集,以生成搜索结果列表。我需要将空白和无选项添加到其中一个字段的选项的顶部。我希望空值表示“不过滤此字段”。我希望None值表示“过滤此字段的状态为空”。我遇到的问题是,在执行过滤的表单方法中,我需要检查该值是否为真(以便空提交不进行过滤),并且我需要将字符串'None‘显式地转换为'’。

如何编写此代码来区分选择不应过滤的值和显式查询''?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-04-24 08:35:14

在Python中,None为Falsey,因为它是一个空字符串。要区分这两者,请使用is运算符,如下所示:

代码语言:javascript
复制
if value is None:
    #im none, do something

您的逻辑非常混乱-您希望空字符串表示不过滤,但将None值更改为空白,并希望它表示“空白状态”,无论这意味着什么……

if值运算符将只对非空字符串而不是None值进行操作,因此其中的None逻辑将永远不会达到。所以你可以(如果我理解逻辑的话);

代码语言:javascript
复制
if value:
    #do filtering
elif value is None:
    #do something with your None object

更新:

像这样过滤你的qs:

代码语言:javascript
复制
new_qs = qs.filter(key=value if value != 'None' else '')

你不需要像现在这样用一个键来解开字典。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29835350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档