6
g = Goal.objects.filter(Q(title__contains=term) | Q(desc__contains=term))

我怎样才能添加到我的filter那个user=request.user

这不起作用:

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()
4

3 回答 3

12

Keyword arguments (user=request.user) must come after non keyword arguments (your Q object).

Either switch the order in your filter:

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

or chain two filter() calls together

Goal.objects.filter(user=request.user).filter(Q(title__contains=term) | Q(desc__contains=term))
于 2014-01-17T15:01:30.450 回答
1
g = Goal.objects.filter(Q(user__iexact=request.user) & Q(title__contains=term) | Q(desc__contains=term))

使用 & 代替 Python 和运算符

于 2014-01-17T15:08:15.273 回答
1

根据 django文档

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

于 2017-11-23T06:39:19.793 回答