Как получить объекты, которые имеют объект в поле 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 a ManyToManyField [Django-doc] makes no sense: one can not enforce by the database that a ManyToManyField should be non-empty, therefore as the documentation says: "null has no effect since there is no way to require a relationship at the database level. "

Вернуться на верх