2016-07-26 3 views
1

У меня есть сигнал предварительного сохранения для одной из моих моделей. Этот сигнал предварительного сохранения выполняет некоторую деятельность фонового API для синдикации новых и обновленных объектов поставщикам услуг и возврата бессмысленных данных для хранения в качестве ссылок в местах исходных данных.Django pre-save signal

Новые и обновленные методы в API отличаются.

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

Предустановленный сигнал имеет аргумент update_fields. Я искал некоторые детали и обнаружил, что этот аргумент может включать все поля при выполнении обновления.


Что касается update_fieldsкак документы имеют мало информации об этом

  • При создании объекта, ничего не делает получить передается update_fields?
  • При обновлении объекта все поля передаются в update_fields или только те, которые были обновлены?

Есть ли какие-либо другие предложения по тому, как это решить? Я знаю, что post_save имеет аргумент created, но я предпочел бы работать с данными до его сохранения.

ответ

2

При создании объекта ничего не передается в update_fields?

No.

При обновлении объекта все поля передаются в update_fields или только те, которые были обновлены?

Зависит от того, кто вызывает метод save(). По умолчанию Django не устанавливает update_fields. Если ваш код не вызывает save() с набором аргументов update_fields, он перепишет все поля в базе данных, а сигнал pre_save увидит update_fields=None.

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

Если вы не контролируете то, что вызывает save() метод на объекте, вы не получите эту информацию с помощью update_fields. Цель этого аргумента заключается не в том, чтобы вы могли отслеживать, какие поля были изменены, а скорее для облегчения эффективной записи данных, когда вы знаете, что нужно писать только определенные столбцы в базе данных.

+0

Я напишу отдельную форму для обновления и установил там 'update_fields' ... – henryaaron

Смежные вопросы