【问题标题】:Q objects in django querysetdjango 查询集中的 Q 对象
【发布时间】:2014-02-06 22:51:24
【问题描述】:
g = Goal.objects.filter(Q(title__contains=term) | Q(desc__contains=term))

如何将user=request.user 添加到我的filter

这不起作用:

g = Goal.objects.filter(user=request.user, Q(title__contains=term) | Q(desc__contains=term))

型号:

class Goal(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=255)
    desc = models.TextField()

【问题讨论】:

  • 请先展示您的模型。
  • @alecxe 我更新了问题
  • 不要只说“这不起作用”,请包括回溯。在这种情况下,回溯是SyntaxError: non-keyword arg after keyword arg,它准确地解释了发生了什么。

标签: django django-q


【解决方案1】:

关键字参数 (user=request.user) 必须在 非关键字参数(您的 Q 对象)之后。

在过滤器中切换顺序:

Goal.objects.filter(Q(title__contains=term) | Q(desc__contains=term), user=request.user) 

或将两个filter() 调用链接在一起

Goal.objects.filter(user=request.user).filter(Q(title__contains=term) | Q(desc__contains=term))

【讨论】:

    【解决方案2】:
    g = Goal.objects.filter(Q(user__iexact=request.user) & Q(title__contains=term) | Q(desc__contains=term))
    

    使用 & 代替 Python 和运算符

    【讨论】:

      【解决方案3】:

      根据 django docs.

      查找函数可以混合使用 Q 对象和关键字参数。但是,如果提供了 Q 对象,则它必须在任何关键字参数的定义之前。

      【讨论】:

        猜你喜欢
        • 2015-07-15
        • 2013-12-11
        • 2015-08-19
        • 2015-06-23
        • 2010-12-27
        • 2021-09-15
        • 2013-02-27
        • 2014-03-22
        相关资源
        最近更新 更多