Как получить объекты, которые имеют объект в поле ManyToMany?
Есть такая модель:
class User(AbstractUser):
followers = models.ManyToManyField('self', symmetrical=False, related_name='followings', null=True, blank=True)
Допустим, у меня есть объект пользователя по имени 'A'. В представлении я хочу отфильтровать объекты пользователей, у которых 'A' является последователем. Как я могу это сделать?
Вы можете сделать запрос с помощью:
A.followings.all()
related_name=… [Django-doc] - это имя отношения в обратном порядке, так что это QuerySet из User, которые имеют A как follower.
Если вы не укажете related_name=…, то будет взято имя модели в нижнем регистре, за которым следует суффикс …_set, так что user_set в данном случае.
Если у вас есть только первичный ключ A, то вы можете сделать запрос с:
User.objects.filter(followers__id=a_id)
Note: Using
null=True[Django-doc] for aManyToManyField[Django-doc] makes no sense: one can not enforce by the database that aManyToManyFieldshould be non-empty, therefore as the documentation says: "nullhas no effect since there is no way to require a relationship at the database level. "