Django: исключить объекты на основе другой модели - PullRequest
1 голос
/ 04 апреля 2020

У меня есть модель 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))

Что, очевидно, не работает так, но я не уверен, как написать так, чтобы оно работало.

1 Ответ

2 голосов
/ 04 апреля 2020

Вы можете исключить Comment с из user, для которого существует BlockedUser с blocked_by с request.user с:

Comment.objects.exclude(<b>user__blockeduser__blocked_by=request.user</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...