我有一个追随者的模型。这个模型是这样的:
class Follow(models.Model):
followee = models.ForeignKey(User, on_delete=models.CASCADE, related_name="followee")
follower = models.ForeignKey(User, on_delete=models.CASCADE, related_name="follower")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="created at")
updated_at = models.DateTimeField(auto_now=True, verbose_name="updated at")
class Meta:
unique_together = ["followee", "follower"]
def __str__(self):
return "{} is following {}".format(self.follower, self.followee)
def save(self, *args, **kwargs):
if self.followee == self.follower:
return "You cannot follow yourself"
else:
super().save(*args, **kwargs)
用户创建多种类型的对象,如帖子和问题。我希望显示关注特定用户的所有用户的所有帖子和问题。简化显示关注我的用户的所有帖子和问题。
我正在使用一个名为drf_multiple_model
的模块,这是我的视图,我无法使用它。它给了我下面的错误,我不明白:
Cannot use QuerySet for "Follow": Use a QuerySet for "User".
下面是我使用的视图:
def get_followers(queryset, request, *args, **kwargs):
id = kwargs['user']
user = User.objects.get(id=id)
followers = Follow.objects.all().filter(followee=user)
return queryset.filter(user__in=followers)
class HomeView(FlatMultipleModelAPIView):
permission_classes = [IsAuthenticated]
def get_querylist(self):
querylist = [
{'queryset':Post.objects.all(), 'serializer_class': UserPostSerializer, 'filter_fn': get_followers, 'label':'post'},
{'queryset':Question.objects.all(), 'serializer_class': QuestionSerializer, 'filter_fn': get_followers, 'label':'question'},
]
return querylist
请问我做错了什么?
2条答案
按热度按时间ztmd8pv51#
为了能够使用
__in
过滤器,followers
应该是User
s的可迭代对象。或
h43kikqp2#
您可以使用JOIN进行筛选,例如:
这将在单个查询中获取项目,从而避免先查询关注者然后再获取项目。