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

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

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

  • проект
    • Программы
      • Foo
        • модели
          • __init__.py
          • 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 ответа

Решение

См. Билет 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
Другие вопросы по тегам