#python #django #model
#python #django #Модель
Вопрос:
При создании повторно используемого приложения должен ли я помещать все модели, которые я определяю, в один файл models.py
или я могу сгруппировать модели в несколько файлов, например topic1.py
, topic2.py
?
Пожалуйста, опишите все причины за и против.
Ответ №1:
Особенность models
подмодуля в том, что он автоматически импортируется в определенное время в процессе инициализации. Все ваши модели также должны быть импортированы в это время. Вы не можете импортировать их раньше, чем это, и их импорт позже может привести к ошибкам.
Вы можете определить свои модели в другом модуле, но вы всегда должны импортировать все свои модели в свою models.py
models/__init__.py
редакцию. Например.:
# models/topic1.py
class Topic1(models.Model):
...
# models/__init__.py
from .topic1 import Topic1
Если вы импортируете каждую модель в models.py
или models/__init__.py
, это также позволяет импортировать все модели непосредственно из этого файла. В примере это означает, что вы можете импортировать Topic1
из myapp.models
, а не только из myapp.models.topic1
. Таким образом, вы можете упорядочивать свои модели по нескольким файлам без необходимости запоминать точное местоположение каждой модели всякий раз, когда вам нужно их импортировать.
Комментарии:
1. Импортируются ли модели
models/
автоматически? (с пустым__init__.py
)2. Загружается только
models
модуль. Как это обычно в python, это означает__init__.py
, что фактически загружается только файл. Чтобы загрузить другие файлы вmodels/
каталог, вам необходимо импортировать их по отдельности.
Ответ №2:
это зависит от того, сколько моделей вы определяете, если у вас есть только модель класса 1-5, просто поместите ее в один файл, но если у вас более 5 моделей классов, я предлагаю поместить ее в несколько файлов,
но, по моему опыту, если модель помещается в серверные файлы, она становится немного громоздкой, когда дело доходит до импорта материала,
Комментарии:
1. но все они должны быть в
models/
каталоге, чтобы Django мог их найти, верно? или нет?2. да, и одна вещь, которую вы должны импортировать модели классов, а не файлы, например, из app.models.topic_one import ModelClass примечание: используйте snake_case для файлового модуля и FirstCase для модели класса, это поможет вам, когда дело доходит до импорта материала.