Модель в подкаталоге через app_label?

Чтобы разместить мои модели в подпапках, я попытался использовать мета-поле app_label, как описано здесь.

Моя структура каталогов выглядит так:

  • Проект
    • приложения
      • Foo
        • модели
          • __ __ INIT. Ру
          • bar_model.py

В 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

syncdb не будет создавать таблицы для моделей, не расположенных в <appname>.models, поэтому импортируйте их там, например. from apps.foo.models import SomeModel.