Подтвердить что ты не робот

Как использовать "обратную" связь Django ManyToMany?

Я прихожу из фона Rails, и у меня есть немного проблем с использованием "методов ассоциации", предоставляемых в Django. У меня есть две модели (которые были упрощены ради краткости), например:

class User(models.Model):
    username = models.CharField(max_length=100, unique=True)
    companies = models.ManyToManyField('Company', blank=True)

class Company(models.Model):
    name = models.CharField(max_length=255)

В соответствии с документацией Django:

"Не имеет значения, какая модель имеет ManyToManyField, но вы должны поместить ее только в одну из моделей - не оба.".

Итак, я понимаю, что если у меня есть экземпляр пользователя, называемого пользователем, я могу сделать:

user.companies

Мой вопрос: как мне сделать обратное? Как получить всех пользователей, принадлежащих экземпляру компании, скажем, Company:

company.users # This doesn't work!

Какое соглашение для этого? Документация, которую я прочитал, на самом деле не охватывает это. Мне нужна ассоциация для работы в обоих направлениях, поэтому я не могу просто перенести ее с одной модели на другую.

4b9b3361

Ответ 1

company.user_set.all()

вернет QuerySet объектов User, принадлежащих определенной компании. По умолчанию вы используете modelname_set, чтобы отменить связь, но вы можете переопределить это, предоставляя related_name в качестве параметра при определении модели, т.е.

class User(models.Model):
    companies = models.ManyToManyField(User, ..., related_name="users")

> company.users.all()

вот соответствующая документация