Как определить, является ли свойство Model отношением внешнего ключа?(И получить все объекты FK Model) - PullRequest
1 голос
/ 11 июля 2019

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

Для этого есть два компонента:

  • Я борюсьчтобы определить, является ли свойство объекта отношением FK
  • Я пытаюсь получить все объекты той же модели, что и FK

Идея в псевдокоде:

for field in object.fields:
  if field is FK:
    return field.objects.all()
  else:
    return field

Я знаю, что могу проверить отношение ForwardManyToOneDescriptor (ниже), но существует ли более компактный общий способ проверки отношения FK?

isintance(Foo.bar, db.models.fields.related_descriptors.ForwardManyToOneDescriptor):

Есть ли способ получить все объекты модели FK, либо классом модели, либо экземпляром класса?Foo.bar.all() или Foo.objects.first().bar.all()

1 Ответ

1 голос
/ 11 июля 2019

Вместо итерации по полям объекта, вы можете получить доступ к объекту _meta и итерации по полям, например:

from django.db import model

[f for f in t._meta.get_fields() if isinstance(f, models.ForeignKey)]

Вы можете получить модель, на которую ссылаются:

[f<b>.related_model</b> for f in t._meta.get_fields() if isinstance(f, models.ForeignKey)]

Таким образом, вы можете получить наборы запросов со всеми объектами с помощью:

[f.related_model<b>.objects.all()</b> for f in t._meta.get_fields() if isinstance(f, models.ForeignKey)]
...