Понимание Model.from_db() в Django

Я читал Django Official Doc for Model, там написано:

classmethod Model.from_db(db, field_names, values)¶

.

Метод from_db() может быть использован для настройки создания экземпляра модели при загрузке из базы данных.

Аргумент db содержит псевдоним базы данных, из которой загружается модель, field_names содержит имена всех загруженных полей, а values содержит загруженные значения для каждого поля в field_names. field_names расположены в том же порядке, что и values. Если все поля модели присутствуют, то values гарантированно находятся в том порядке, в котором их ожидает __init__(). То есть экземпляр может быть создан по cls(*values). Если какие-либо поля отложены, то они не появятся в field_names. В этом случае присвойте значение django.db.models.DEFERRED каждому из отсутствующих полей.

Я совершенно потерялся, когда читал выше.

  • Первое восприятие: "при загрузке из базы данных": для меня loading означает чтение/извлечение данных из базы данных, что означает, что model instance уже существует или создан и хранится в БД.
  • 2-ое восприятие: "использоваться для настройки создания экземпляра модели", а также 2-й абзац заставляют меня чувствовать, что этот from_db() предназначен для model instance создания, что противоречит моему 1-му восприятию.

Вопрос: Кто-нибудь может поделиться, почему, когда и как мы используем from_db() в Django?

Данные модели существуют в виде строк в БД, когда эти данные извлекаются из БД с помощью запросов, необработанные данные должны быть преобразованы в экземпляры модели, Model.from_db является методом, который выполняет это преобразование.

Первое восприятие: "при загрузке из БД": для меня загрузка означает чтение/получение данных из БД, что означает, что экземпляр модели уже существует или создан и хранится в БД.

.

Это почти правильно, модель data существует в базе данных, модель instances создается этим методом, когда эти данные запрашиваются

2-ое восприятие: "использоваться для настройки создания экземпляра модели", а также 2-й абзац заставляют меня думать, что эта функция from_db() предназначена для создания экземпляра модели, что противоречит моему 1-му восприятию.

.

Это правильно, Model.from_db предназначен для создания экземпляра и может быть переопределен для настройки этого процесса

После выполнения запроса к базе данных Django создаст объекты модели. Он делает это, вызывая метод .from_db(…) [Django-doc]. Если запрос возвращает две записи с первой записью {'id': 14, 'name': 'foo'} и второй записью {'id': 25, 'name': 'bar'}, то метод .from_db(…) будет вызван дважды с SomeModel.from_db('db-alias', ['id', 'name'], [14, 'foo']) и SomeModel.from_db('db-alias', ['id', 'name'], [25, 'bar']). Таким образом, этот метод используется для преобразования данных базы данных в объекты модели.

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

Вернуться на верх