Могу ли я разделить модели в разных файлах в 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'
чтобы убедиться, что ваши модели распознаются как часть приложения.