Модель в подкаталоге через app_label?
Чтобы разместить мои модели в подпапках, я попытался использовать метаполе 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?
2 ответа
См. Билет Django № 10985: Объясните, как модели могут быть организованы в каталоге
Возможно, вы не импортируете свои модели в __init__.py
?
syncdb
не будет создавать таблицы для моделей, не расположенных в <appname>.models
так что импортируйте его туда, например from apps.foo.models import SomeModel
,
Вот решение, если у вас более новая версия Django, предположим, у вас есть подпапка с именем subfolder
:
в apps.py
вашего приложения папки:
from django.apps import AppConfig
class MyappConfig(AppConfig):
name = 'myapp'
def ready(self):
from myapp.subfolder import models