Чтобы разместить мои модели в подпапках, я попытался использовать мета-поле app_label, как описано here.Модель в подкаталоге через app_label?
Моя структура каталогов выглядит следующим образом:
- проект
- приложения
- Foo
- модели
- __init_ _.py
- bar_model.py
- модели
- Foo
- приложения
В bar_model.py я определяю свою модель, как это:
from django.db import models
class SomeModel(models.Model):
field = models.TextField()
class Meta:
app_label = "foo"
Я могу успешно импортировать модель такая:
from apps.foo.models.bar_model import SomeModel
Однако, бег:
./manage.py syncdb
не создает таблицу для модели. Однако в подробном режиме я вижу, что приложение «foo» правильно распознано (оно находится в INSTALLED_APPS в settings.py). Перемещение модели на models.py под foo действительно работает.
Существует ли какое-либо конкретное соглашение, не документированное с помощью app_label или со всем механизмом, который предотвращает распознавание этой структуры модели с помощью syncdb?
Точно! Теперь это работает. – nikola
Спасибо! Да, вам нужно будет импортировать их в '__init __. Py' и дать им' app_label' через класс 'Meta' модели. –
Важное дополнение из @ mustafa.0x вы * должны * предоставить такую же app_label, что и имя метки, которое вы предоставляете, в качестве имени модуля или того, которое вы предоставили в реестре AppConfig, если бы он не возвращал пустой OrderedDict(), если вы получите apps.get_app_config ('app_label'). модели после импорта django.apps.apps – danigosa