Мне любопытно, что другие думают об этой проблеме ...
В последние несколько дней я ходил взад и вперед по поводу использования QuerySet.update()
против ModelInstance.save()
. Очевидно, что если будет изменено много полей, я бы использовал save()
, но для обновления пары полей я думаю, что лучше использовать QuerySet.update()
. Преимущество использования QuerySet.update()
состоит в том, что вы можете одновременно запускать несколько потоков update()
на разных полях одного и того же объекта, и у вас не будет проблем с расой. Метод save()
по умолчанию сохраняет все поля, поэтому параллельная save()
из двух потоков будет проблематичной.
Итак, проблема в том, что если у вас перегружены пользовательские save()
методы. Лучшее, что я могу придумать, это абстрагировать что-либо в пользовательском методе save()
в отдельные методы обновления, которые на самом деле используют QuerySet.update()
для установки пары полей в модели. Кто-нибудь использовал этот шаблон?
Что немного раздражает, так это то, что в Django Admin даже при редактировании в режиме списка изменений, когда вы редактируете только одно поле, сохраняется вся модель. По сути, это означает, что если у кого-то открыт список изменений в его / ее браузере, а в некоторых других местах системы поле обновляется, это обновленное значение будет выброшено, когда этот пользователь сохранит изменения из списка изменений. Есть ли решение этой проблемы?
Мысли
Спасибо.