【问题标题】:Why doesn't the django queryset contains work for me?为什么 django 查询集不包含适合我的工作?
【发布时间】:2012-05-25 09:31:16
【问题描述】:

根据this documentation,我应该能够在我的 Django 对象变量上使用查询集“_contains”来过滤我的结果

但是当我实现这段代码时:

cookbooks = Books.objects.filter (category_contains = 'cooking')

我收到以下错误:

Cannot resolve keyword 'category_contains' into field. Choices are: category, adder, date etc.

为什么会这样?我还看到this StackOverflow question,有人解释说仅使用变量category 就意味着category_exact。但是如果我写 category_exact 我会得到类似的错误。

【问题讨论】:

    标签: python django


    【解决方案1】:

    您需要使用双下划线__ 而不是单下划线_

    【讨论】:

    • 哦,你是对的。在玩的时候,我改变了一些其他的东西。那成功了!谢谢!
    【解决方案2】:

    字段查找的前缀是两个下划线 (__) 而不是一个 (_)。如果您不熟悉语法,一开始可能很难区分。

    仔细检查field lookups 的文档,更具体地说,检查contains 文档。以下是 contains 文档中的示例,其中 cmets 显示一个或两个下划线:

    Entry.objects.get(headline__contains='Lennon')
    #                         __ <-- 2 _'s
    #                     not _  <-- 1 _
    

    【讨论】:

    • 我的解决方案是你的=。请注意,Django 在Entry.objects.get(headline__contains('Lennon')) 上给出了NameError,告诉headline__contains 名称未定义。但是 将括号更改为 = 并且 NamError 消失了。
    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 2014-07-15
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    相关资源
    最近更新 更多