2009-12-11 2 views
7

После прочтения ответа монокром на Where should Django manager code live?, я решил разбить большой models.py на более мелкие и более управляемые файлы. Я использую структуру папокФайл с файлами refactor large models.py в приложении Django

foodapp/ 
    models/ 
     __init__.py #contains pizza model 
     morefood.py #contains hamburger & hotdog models 

В __init__.py я импортировать модели из morefood.py с

from morefood import hamburger, hotdog 

Однако, когда я бегу python manage.py syncdb, единственная таблица, созданный foodapp_pizza - Что мне нужно сделать, чтобы Django создавал таблицы для моделей, которые я импортировал из morefood.py?

+1

Каждый человек имеет разные представления о том, насколько большой файл «слишком большой », но в целом я обнаружил, что если приложение требует рефакторинга своих моделей.py, это обычно указывает на приложение, которое не делает« только одну вещь », и это самое приложение, которое нужно реорганизовать в несколько приложений. Просто мысль. –

+0

Оба ответы ниже хорошо работают. Я предпочитаю, чтобы kibitzer слегка одобрял, что я могу хранить все модели в папке моделей. Я буду следить за билетом (http://code.djangoproject.com/ticket/6961), упомянутым в сообщении в блоге, о котором упоминает Барези. – Alasdair

+0

@ Карл - хорошая точка. В этом конкретном случае я закончил разделение приложения на два. – Alasdair

ответ

3

Или, в моделях morefood.py, добавьте следующие строки в Мета:

class Meta: 
    app_label = 'foodapp' 

Тогда SyncDB будет работать с существующей структурой

7

Попробуйте это:

 
foodapp/ 
    __init__.py 
    models.py 
    /morefood 
     __init__.py 
     hamburger.py 
     hotdog.py 

и сделать это в models.py:

from foodapp.morefood.hamburger import * 
from foodapp.morefood.hotdog import * 

как предложено в this blogpost.

+1

Публикация блога теперь 404, но эта статья кажется тем же контентом: http://www.justinlilly.com/this-and-that/fitures_model_subdir.html – scwagner

Смежные вопросы