Valueerror недействительная ссылка на модель, как мне правильно ссылаться
Мне пришлось изменить ряд моих отношений ManyToMany, чтобы ссылаться на строку вместо импорта модели в файл, чтобы избежать ряда ошибок циклического импорта.
но при попытке запустить, теперь я получаю эту ошибку.
ValueError: Invalid model reference 'dsi.administration.libraries.Library'. String model references must be of the form 'app_label.ModelName'.
Я не знаю, что было бы лучшим способом сослаться на это, и я бы хотел получить чей-либо вклад по этому поводу.
ссылка, о которой идет речь
models.ManyToManyField("dsi.administration.libraries.Library", verbose_name='library choices')
settings.py установленные модули
SHARED_APPS = (
"storages",
"django_tenants", # mandatory
'dsi.events.event',
'dsi.administration.libraries',
'dsi.account'
)
структура папок приложения
├── dsi
│ ├── account
│ │ ├──__init__.py
│ │ ├── models.py
│ ├── events
│ │ ├── event
| │ │ ├── __init__.py
| │ │ ├── models.py
│ │ ├──__init__.py
│ ├── administration
│ │ ├── libraries
| │ │ ├── __init__.py
| │ │ ├── models.py
│ │ ├── general
| │ │ ├── __init__.py
| │ │ ├── models.py
│ │ ├── __init__.py
│ ├── __init__.py
│ ├── urls.py
│ └── settings.py
├── manage.py
Как указано в документации:
Чтобы сослаться на модели, определенные в другом приложении, вы можете явно указать модель с полным приложением label.
Ярлык приложения (если он не указан в конфигурации приложения) по умолчанию является последней частью полного пути python (имя приложения) к приложению, поэтому libraries
, а не . Если у вас есть dsi.administration.libraries.Library
AppConfig
, то AppConfig
будет указывать имя приложения, такое AppConfig
может выглядеть так:
# dsi/administration/libraries/apps.py
from django.apps import AppConfig
class AppNameConfig(AppConfig):
name = 'dsi.administration.libraries'
Следовательно, здесь метка будет libraries
. Если вы таким образом нашли метку приложения, то следует указать модель с помощью app_label.Library
, так что если app_label
равно libraries
, то это:
class SomeModel(models.Model)
models.ManyToManyField(
'libraries.Library',
verbose_name='library choices'
)