Могу ли я разделить модели в разных файлах в django

В настоящее время все мои модели находятся в models.py - ... Это становится очень грязным. Могу ли я иметь отдельный файл, например base_models.py Так что я поставил свои основные модели, которые я не хочу трогать

также тот же случай для просмотров и поместить в отдельную папку, а не разрабатывать новое приложение

4 ответов


Да, это выполнимо. Это не особенно красиво, хотя:

сделайте модели модулем, чтобы ваша структура каталогов выглядела так:

- models
|- __init__.py
|- some_model.py
|- some_other_model.py
|- ...

теперь, магия лежит в __init__.py и некоторые небольшие дополнения в моделях. __init__.py:

from some_model import SomeModel
from some_other_model import SomeOtherModel

__all__ = [ 
    'SomeModel',
    'SomeOtherModel',
]

some_model.py:

class SomeModel(models.Model):
    class Meta(object):
        app_label = 'yourapplabel'
        db_table = 'yourapplabel_somemodel'

все, что сказал acjohnson55, плюс тот факт, что вам нужно указать атрибут app_label в мета-классе каждой модели.

ссылка на фактический пример на github: https://github.com/stefanfoulis/django-filer/tree/develop/filer/models


вы можете разделить файл модели такой :
------- модели!--1--> -------------- init.py
-------------- usermodels.py
--------------othermodel.py

в init.py:
--------------- из usermodels import*
---------------от othermodel импорт *
и в *models.py , добавить мета-класс:
--------класс мета:
-------------- app_label = 'appName'


да, просто сделайте папку под названием models и в этой папке поместите все ваши отдельные файлы модели. Вам нужно поместить файл под названием __init__.py на models папка для него, чтобы считаться models модуль. В __init__.py используйте from ... import ... чтобы поместить имена, которые вы хотите доступны непосредственно в yourapp.models, в противном случае вам придется импортировать их как yourapp.models.base_model, или любое имя подмодуля, которое вы используете.

кроме того, в каждой модели вам нужно будет добавить мета-атрибут под названием app_label = 'yourapp' чтобы убедиться, что ваши модели распознаются как часть приложения.