Django фильтр с Q объектами не работает или я делаю это неправильно

У меня есть представление для проверки, являются ли два пользователя друзьями, и в данном случае они являются друзьями, потому что пользователь, вошедший в систему, и автор блога действительно являются друзьями, но модель для дружбы работает только в одном направлении, и мне нужно предусмотреть это, поэтому я написал эту функцию. Ведь если пользователь1 дружит с пользователем2, то автоматически пользователь2 дружит с пользователем1:

Модель дружбы:

class Friendship(models.Model):
    person = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="person"
    )
    friend = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="friend"
    )

    created_at = models.DateTimeField(auto_now_add=True, verbose_name="created at")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="updated at")

Метод сериализатора:

   def get_friends(self, obj):
        loggedUser = self.context.get('view').kwargs.get('user')
        post_author = obj.user_id
        friends = Friendship.objects.filter(Q(person=loggedUser), Q(friend=post_author) | Q(person=post_author), Q(friend=loggedUser))
        if friends:
            return True
        else:
            return False

Пожалуйста, скажите мне, что я делаю неправильно, потому что он говорит, что они не друзья, хотя они друзья?

Я понял, что вы пытаетесь сделать, но вам больше повезет, если вы построите логику AND немного по-другому.

Попробуйте поместить каждое соединение AND внутрь объекта Q и соединить их вместе с операндом OR.

Q(person=loggedUser, friend=post_author) | Q(person=post_author, friend=loggedUser)
Вернуться на верх