Получить объект, если поле «Многие ко многим» содержит определенный внешний ключ - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь внедрить систему друзей в django, и у меня возникают проблемы с проверкой, когда два пользователя уже являются друзьями (для предотвращения двойного запроса)

Система работает, когда каждый пользователь по отдельности сопоставляется с одним и тем жеДруг объект для обозначения дружбы.

Рассмотрим следующий код

models.py

class Friendship(models.Model): 
    # some other stuff ... 

class FriendshipMapping(models.Model): 
    user_id = models.ForeignKey('User',related_name="friendship_mappings",on_delete=models.CASCADE)
    friendship_id = models.ForeignKey('Friendship',related_name="mapped_by",on_delete=models.CASCADE)
    # some other stuff ...

class User(AbstractUser): 
    friendships = models.ManyToManyField(
        'Friendship', 
        through='FriendshipMapping', 
        symmetrical=True, 
        through_fields=('user_id','friendship_id'), 
        related_name='joined_users', 
    )
    # some other stuff ...

Теперь скажите, что у меня 2 User объектов, и я хотел бы выяснить, указан ли объект дружбычтобы оба из них, не получая один из их полного набора дружбы и итерируя через это.Я попробовал следующее

existing_friendship = user1.friendships.get(joined_users__in=user2)

, но оно возвращается пустым, даже когда я знаю, что есть дружба, на которую они оба указывают.

Существует очень мало документации по этому виду поиска, и я не уверен, что мой синтаксис действителен или что на самом деле делает __in.Возможно ли что-то подобное в Django?

Хотелось бы помочь!

1 Ответ

0 голосов
/ 17 апреля 2019

Вы можете запросить Friendship s, которые связаны с обоими пользователями в FriendshipMapping, например:

existing_friendships = (Friendship.objects
    .filter(mapped_by__user_id=user1)
    .filter(mapped_by__user_id=user2)
)
...