【问题标题】:Django ~Q queriesDjango ~Q 查询
【发布时间】:2015-02-28 08:39:20
【问题描述】:

这是我的错误,我真的找不到与我的问题类似的东西:

from django.db.models import Q    
_entry = Entry.objects.get(Q(slug=slug, author=self.author) & ~Q(id=self.id))

TypeError: 一元操作数类型错误 ~: 'Q'

【问题讨论】:

  • 你能显示更多的错误信息吗? (前几行)
  • 你使用的是哪个 Django 版本?
  • 这很奇怪,这应该可以工作

标签: django django-models django-queryset django-q


【解决方案1】:

您尝试使用Qs 的替代方法是使用filter()+exclude()+get()

_entry = Entry.objects.filter(slug=slug, author=self.author).exclude(id=self.id).get()

【讨论】:

    【解决方案2】:

    django Q 对象中不仅有'&',还有逗号','代表AND,所以你也可以试试:

    from django.db.models import Q    
    _entry = Entry.objects.get(Q(slug=slug), Q(author=self.author) , ~Q(id=self.id))
    

    虽然我无法重现您遇到的错误。还请确保 slug、self.author 和 self.id 具有正确类型的数据以进入各自的字段。

    Here 是完整参考的文档

    【讨论】:

    • 您链接到的文档说“Q 对象可以使用 & 和 | 进行组合”运营商。
    • 请注意文档中的示例,& 从未使用过,而是使用逗号,在直接 sql 翻译中,您会看到它转换为 sql AND..
    • 对不起,你是对的.. & 也确实有效。感谢您指出:)
    • 正确的@Anentropic 。我只想得到一个结果,就像问的问题一样。否则alecxe答案应该是最好的解决方案
    猜你喜欢
    • 2014-08-12
    • 2012-10-16
    • 2012-09-04
    • 2015-11-12
    • 2015-06-23
    • 2014-03-25
    • 2010-12-27
    • 2014-02-06
    • 2015-07-15
    相关资源
    最近更新 更多