Я работаю над проектом django с устаревшим DB, используя formet для редактирования набора строк. В этой БД есть поля, которые я не хочу обновлять django, хотя они мне нужны в моей модели. Другими словами, я хочу, чтобы к ним относились как к полям READ-ONLY. Таким образом, я был рад прочитать документацию по экономии модели FormSets, в котором говорится:Почему BaseModelForm обновляет ВСЕ поля, несмотря на то, что документация говорит, что нет? Это ошибка?
«Когда поля отсутствует в форме (например, потому что они были исключены), эти поля не будут установлены метод save(). можно найти более подробную информацию об этом ограничении, которое также выполняется для обычных моделей моделей в разделе Выбор полей для использования. "
https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#saving-objects-in-the-formset
В самом деле, когда forms.model.BaseModelForm.save() вызывается, он вызывает forms.model.save_instance(), прекрасно передавая все поля формы. НО, чем затем вызывает instance.save() БЕЗ прохождения вдоль полей update_fields !! А так все модельные поля включены в запрос обновления :-(
В качестве теста, я изменил forms.model.save_instance(), чтобы передать поля:
instance.save(update_fields=fields)
и вуаля - только модель сохраняет поля, перечисленные по его форме.
Я надеюсь, что кто-то, более вовлеченный в проект django, может сказать мне, если это ошибка или проблема с документацией? Должен ли я отправить отчет об ошибке? другим способом я должен применять «только для чтения» в этих полях?
Использование django1.8 и python3.4
Я думаю, что было бы интересно узнать об этом в списке рассылки [django-developers] (https://docs.djangoproject.com/en/1.8/internals/mailing-lists/#django-developers). Если вы считаете, что документация может быть улучшена, я уверен, что патч будет очень желанным. – Alasdair