Django:排除基于另一个模型的对象
Django: exclude objects based on another model
我有一个模型Comment
:
class Comment(models.Model):
upload = models.ForeignKey(Upload, related_name='comments', on_delete=models.CASCADE)
user = models.ForeignKey(get_user_model(), related_name='comments', on_delete=models.CASCADE)
text = models.TextField(blank=False, null=False)
date_created = models.DateTimeField(auto_now_add=True)
我也有模特BlockedUser
:
class BlockedUser(models.Model):
blocked_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name="blocked_by")
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
date_created = models.DateTimeField(auto_now_add=True)
我如何才能获取除您已屏蔽的人所写评论之外的所有评论?
queryset = Comment.objects.all().select_related('user')
queryset = queryset.exclude(user__in=BlockedUser.objects.filter(blocked_by=self.request.user))
这显然不能像那样工作,但我不确定如何编写它才能工作。
您可以从存在 BlockedUser
和 blocked_by
的 Comment
中排除 user
和 request.user
以及:
Comment.objects.exclude(<b>user__blockeduser__blocked_by=request.user</b>)
我有一个模型Comment
:
class Comment(models.Model):
upload = models.ForeignKey(Upload, related_name='comments', on_delete=models.CASCADE)
user = models.ForeignKey(get_user_model(), related_name='comments', on_delete=models.CASCADE)
text = models.TextField(blank=False, null=False)
date_created = models.DateTimeField(auto_now_add=True)
我也有模特BlockedUser
:
class BlockedUser(models.Model):
blocked_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name="blocked_by")
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
date_created = models.DateTimeField(auto_now_add=True)
我如何才能获取除您已屏蔽的人所写评论之外的所有评论?
queryset = Comment.objects.all().select_related('user')
queryset = queryset.exclude(user__in=BlockedUser.objects.filter(blocked_by=self.request.user))
这显然不能像那样工作,但我不确定如何编写它才能工作。
您可以从存在 BlockedUser
和 blocked_by
的 Comment
中排除 user
和 request.user
以及:
Comment.objects.exclude(<b>user__blockeduser__blocked_by=request.user</b>)