django queryset中的Q对象

时间:2014-01-17 14:51:45

标签: django django-q

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

3 个答案:

答案 0 :(得分:10)

关键字参数(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))

答案 1 :(得分:1)

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

使用&代替Python和运算符

答案 2 :(得分:0)

根据django docs

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