Django 跨模型过滤
Django Filtering across models
我需要根据用户是否关注 post 的作者来过滤时间线 post 条目(就像 FB 一样)。如何使用过滤器实现此目的
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( ??? )
您可以过滤:
Timeline_Post.objects.filter(
<b>author__followers=<i>user</i></b>
)
与 user
应该关注 Timeline_Post
的 author
的用户,所以可能 self.request.user
.
我需要根据用户是否关注 post 的作者来过滤时间线 post 条目(就像 FB 一样)。如何使用过滤器实现此目的
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( ??? )
您可以过滤:
Timeline_Post.objects.filter(
<b>author__followers=<i>user</i></b>
)
与 user
应该关注 Timeline_Post
的 author
的用户,所以可能 self.request.user
.