Программно определять ссылки на внешние ключи django, но пропустить через таблицы - PullRequest
0 голосов
/ 17 февраля 2012

Ранее я задавал вопрос , чтобы программно идентифицировать ссылки на внешние ключи. .

Я обнаружил, что приведенный ниже код перетягивает все ссылки «один ко многим»:

yourModel._meta.get_all_related_objects()

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

class Model_one(models.Model):
    name = models.CharField("Name", max_length=30)
    people = models.ManyToManyField('Model_two', blank=True, through='Association')

Вместо того, чтобы ничего не возвращать, код возвращает Ассоциацию.Есть ли способ указать «реальные» ссылки «один ко многим» или иным образом пропустить таблицы?Даже если мне придется удалить его вручную из возвращенного yourModel._meta.get_all_related_objects ()?

Еще один способ задать вопрос: Как определить / изолировать ссылку, которая на самом деле является "сквозной" таблицей

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Вы можете проверить каждый элемент, чтобы увидеть, находится ли он в _meta.get_all_related_many_to_many_objects():

related_m2ms = MyModel._meta.get_all_related_many_to_many_objects()
for related in MyModel._meta.get_all_related_objects():
     if related not in related_m2ms:
         # Do something here with only one-to-many relationships
0 голосов
/ 17 февраля 2012

Найден вопрос , который привел меня в правильном направлении:

m2m_links =MyModel._meta.local_many_to_many
for r in m2m_links:
    if not r.rel.through._meta.auto_created:
        print r.rel.through._meta.object_name

Это даст название "сквозным" таблицам

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