Reputation: 301
I need to filter timeline post entries based on whether a user is following the author of the post or not (just like FB). How to achieve this using filters
models.py
class Timeline_Post(models.Model):
author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
text = models.TextField()
class Contact(models.Model):
user_from = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name='rel_from_set',
on_delete=models.CASCADE)
user_to = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name='rel_to_set',
on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True,
db_index=True)
class Meta:
ordering = ('-created',)
def __str__(self):
return '{} follows {}'.format(self.user_from, self.user_to)
User.add_to_class('following',
models.ManyToManyField('self',
through=Contact,
related_name='followers',
symmetrical=False))
views.py
class TimelinePostList(generics.ListCreateAPIView):
serializer_class = TimelinePostSerializer
def get_queryset(self):
queryset = Timeline_Post.objects.all()
request_queries = self.request.query_params
if(request_queries):
user = request_queries.get('user', None)
return Timeline_Post.objects.filter(author = user)
return Timeline_Post.objects.filter( ??? )
Upvotes: 2
Views: 77
Reputation: 477607
You can filter with:
Timeline_Post.objects.filter(
author__followers=user
)
with user
the user that is supposed to be following the author
of that Timeline_Post
, so probably self.request.user
.
Upvotes: 2