Как запросить неявную таблицу через django (поле ManyToMany)? - PullRequest
2 голосов
/ 24 апреля 2019

В документации django она гласит следующее:

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

Однако я не могу выяснить как Я могу получить доступ к этой таблице.Скажем, у меня есть эта структура:

class Person(models.Model):
    name = models.CharField(max_length=50)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person)

И я хотел бы запросить таблицу, которая содержит person_groups (неявная сквозная таблица) ... как мне это сделать?

PersonGroup.objects.all()

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

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

В вашем случае это будет похоже на Group.members.through.objects.all()

т.е. Group.members.through возвращает класс модели, такой как <class 'appname.models.Group_person'>

Но я все еще не уверен, что это сделает ваш запрос более эффективным. Вы всегда можете отфильтровать одну таблицу, а затем отфильтровать ее членов или людей.

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

Вам нужно определить явную сквозную таблицу, если вы хотите получить к ней доступ через ORM.

Учитывая то, как вы определили ваши отношения

person = Person.objects.get(id=x) 
groups = person.members_set.all() 

и

groups = Group.objects.get(id=x)
members = group.members

В противном случае вам нужно будет получить доступ к таблице через RawSQL-запрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...