Я создаю API для возврата сообщений в профиле пользователя. Сообщения могут быть опубликованы c, только для друзей или с пользовательской конфиденциальностью. Вот мой фильтр:
posts = Post.objects.filter(
Q(created_by=user, privacy='PUBLIC') |
Q(created_by=user, privacy='FRIENDS')|
Q(created_by=instance, privacy='CUSTOM', custom_list=requested_by.pk))
Здесь я хочу получать сообщения 'friends_only', если запрошенный пользователь является другом пользователя, профиль которого я показываю. Проблема в том, что у меня нет никакой связи между почтой и другом. Я использую модель друга, как показано ниже:
class Friend(models.Model):
sender = models.ForeignKey(UserProfile, related_name="sender", on_delete=models.CASCADE)
receiver = models.ForeignKey(UserProfile, related_name="receiver", on_delete=models.CASCADE)
accepted = models.NullBooleanField(default=None)
и модель Post как:
class Post(BaseModel, models.Model):
PRIVACY_CHOICES = [
('PUBLIC', 'Public'),
('PRIVATE', 'Private'),
('FRIENDS', 'Friends only'),
('CUSTOM', 'Custom')
]
text = models.TextField()
image = models.ImageField(upload_to="assets/posts/", null=True, blank=True)
created_by = models.ForeignKey(UserProfile, related_name="posts", on_delete=models.CASCADE)
privacy = models.CharField(max_length=10, choices=PRIVACY_CHOICES)
custom_list = models.ManyToManyField(UserProfile, related_name="post_by_friends", blank=True)
liked_by = models.ManyToManyField(UserProfile, related_name="likes", blank=True)
Мой вопрос заключается в том, как я могу отфильтровать модель Post, указав свое состояние в фильтре is_friend = True