Reputation: 111
g = Goal.objects.filter(Q(title__contains=term) | Q(desc__contains=term))
How can I add to my filter
that user=request.user
?
This doesn't work:
g = Goal.objects.filter(user=request.user, Q(title__contains=term) | Q(desc__contains=term))
Models:
class Goal(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=255)
desc = models.TextField()
Upvotes: 6
Views: 6356
Reputation: 1018
According to django docs.
Lookup functions can mix the use of Q objects and keyword arguments. However, if a Q object is provided, it must precede the definition of any keyword arguments.
Upvotes: 1
Reputation: 4462
g = Goal.objects.filter(Q(user__iexact=request.user) & Q(title__contains=term) | Q(desc__contains=term))
Use & in place of Python and operator
Upvotes: 1
Reputation: 308779
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))
Upvotes: 12