Используя другие имена файлов, чем models.py для моделей Django?

#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 для модели класса, это поможет вам, когда дело доходит до импорта материала.