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'
    )
Вернуться на верх