В Django вы можете указать такие отношения, как:
author = ForeignKey('Person')
А затем внутренне он должен преобразовать строку «Человек» в модель Person
.
Где функция, которая это делает? Я хочу его использовать, но не могу найти.
django
django-models
mpen
источник
источник
from django.apps import AppConfig
django.apps.apps.get_model(model_name)
. Объекты AppConfig предназначены для другой цели и требуют от вас создания экземпляра AppConfig для вызоваget_model()
.django.db.models.loading
был устаревший в Django 1.7 ( удалено в версии 1.9 ) в пользу новой системы загрузки приложений .Документы Django 1.7 вместо этого дают нам следующее:
источник
просто для тех, кто застрял (как и я):
app_name
должны быть указаны в кавычках, как и должноmodel_name
(т.е. не пытайтесь импортировать его)get_model
принимает "имя_модели" в нижнем или верхнем регистреисточник
Большинство "строк" модели имеют вид "appname.modelname", поэтому вы можете использовать этот вариант для get_model.
Часть кода django, которая обычно превращает такие строки в модель, немного сложнее. Это из
django/db/models/fields/related.py
:На мой взгляд, это хороший случай для разделения этого на одну функцию в основном коде. Однако, если вы знаете, что ваши строки находятся в формате «App.Model», два приведенных выше лайнера будут работать.
источник
your_model = get_model(*your_string.rsplit('.', 1))
. Ярлык приложения иногда имеет формат с точками, однако название модели всегда является допустимым идентификатором.apps.get_model
. «В качестве ярлыка этот метод также принимает один аргумент в формеapp_label.model_name
».Благословенный способ сделать это в Django 1.7+:
Итак, в каноническом примере всех руководств по фреймворку:
источник
Если вы не знаете, в каком приложении существует ваша модель, вы можете найти ее следующим образом:
Помните, что your_model_name должно быть в нижнем регистре.
источник
Я не уверен, где это делается в Django, но вы могли бы это сделать.
Сопоставление имени класса со строкой через отражение.
источник
Еще одно исполнение с меньшим количеством кода для ленивых. Протестировано в Django 2+
источник
Вот менее специфичный для django подход для получения класса из строки:
или вы можете использовать importlib, как показано здесь :
источник
2020 решение:
на ваш, например:
per: Ошибка импорта: невозможно импортировать имя get_model
источник