Django добавить к полю многие ко многим работает без сохранения

Какая разница между

group.reportedBy.add(request.user)
group.save()

И

group.reportedBy.add(request.user)

Он сохраняется в БД даже без выполнения команды .save()

Если вы не обновляете поле group (не ManyToManyField, поскольку они реализованы с помощью скрытой таблицы), то сохранение группы не имеет смысла.

Django реализует ManyToManyField с пересечением таблиц [wiki]. Это означает, что он строит дополнительную таблицу с двумя ForeignKey: одна к модели, где вы определяете ManyToManyField, а другая к цели этого поля.

В случае, если вы хотите добавить ссылку на request.user, она, таким образом, не будет обновлять таблицу за моделью Group. Она просто вставит дополнительную запись в таблицу перекрестков, где заполнит ForeignKey к модели Group с первичным ключом group, а ForeignKey к модели пользователя с первичным ключом request.user.

Таким образом, это означает, что добавление, удаление, очистка и т.д. отношения "многие-ко-многим" не внесет изменений в объект Group, а значит, его не следует сохранять. Сохраняя его, вы создаете бесполезный запрос.

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