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
, а значит, его не следует сохранять. Сохраняя его, вы создаете бесполезный запрос.