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)