【问题标题】:Django query parameters not returning NoneDjango查询参数不返回无
【发布时间】:2011-09-12 17:55:10
【问题描述】:

我认为有几行代码可以获取查询参数,然后根据该参数进行过滤。

search = request.GET.get('search', None)

if search:
    accounts = UserProfile.objects.filter(fullname__icontains=search).order_by('fullname')
else:
    accounts = UserProfile.objects.all().order_by('fullname')

出于某种奇怪的原因,在我的本地计算机上,似乎当我提供 localhost/accounts/admin/localhost/accounts/admin/?search= 之类的 URL 时,它工作正常——但是,在我的生产服务器上,它似乎认为搜索是一个空字符串,然后它通过 if/then 条件返回一个空的查询集。 GET:<QueryDict: {u'search': [u'']}>

为什么python似乎认为这个空字符串是“某物”?

>>> x = ''
>>> if x:
...     print "Exists"
... else:
...     print "None"
... 
None

>>> x = u''
>>> if x:
...     print "exists"
... else:
...     print "None"
... 
None

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    实际上,如果您密切注意,搜索变量被设置为一个包含空 unicode 字符串 [u''] 的列表,因此它的评估结果为 True:

    >>> search = [u'']
    >>> bool(search)
    True
    

    为什么您在测试和生产之间看到不同的行为,遗憾的是我不确定为什么!?也许doc 可以提供帮助。

    【讨论】:

    • 你是对的。我不知道为什么我的本地环境和 prod 环境之间存在差异,但这绝对是导致条件评估为 True 的原因。两者都运行相同版本的 python 和 Django——非常奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2011-10-23
    • 2020-03-18
    • 2011-08-20
    • 2022-01-05
    相关资源
    最近更新 更多