Объекты Q в наборе запросов Django
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 ответа
Решение
Ключевое слово аргументы (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))
g = Goal.objects.filter(Q(user__iexact=request.user) & Q(title__contains=term) | Q(desc__contains=term))
Используйте & вместо Python и оператора
Согласно Django Docs.
Функции поиска могут смешивать использование объектов Q и аргументов ключевых слов. Однако, если предоставляется объект Q, он должен предшествовать определению любых аргументов ключевого слова.