2015-07-14 2 views
0

Я работаю над проектом 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

+0

Я думаю, что было бы интересно узнать об этом в списке рассылки [django-developers] (https://docs.djangoproject.com/en/1.8/internals/mailing-lists/#django-developers). Если вы считаете, что документация может быть улучшена, я уверен, что патч будет очень желанным. – Alasdair

ответ

0

Я не уверен, почему вы считаете, что это поведение противоречит этой документации или почему ей необходимо пройти по полям для обновления. У экземпляра уже есть неизменные данные; Django обновит остальные поля из формы и сохранит все это.

+0

Когда я прочитаю «эти поля не будут заданы методом save()», я интерпретировал это как означающее, что в запросе «Обновление» будут указаны только те поля, которые указаны в форме. Возможно, я читаю его так, потому что это мой прецедент, но я не считаю его необоснованной интерпретацией. Кстати, это не ответ, его комментарий. – powderflask

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