запутался в self.instance в save () потомка ModelForm () - PullRequest
3 голосов
/ 04 марта 2011

Документация save () объясняет, что:

Подкласс ModelForm может принимать существующий экземпляр модели в качестве ключевого слова экземпляр аргумента; если это при условии, сохранить () обновит это пример. Если он не поставляется, сохранить () создаст новый экземпляр указанная модель

Однако, self.instance в save() всегда имеет объект.

Итак, как мне узнать, существует ли instance или только что созданный?

1 Ответ

6 голосов
/ 04 марта 2011

Вы можете проверить self.instance.pk, чтобы увидеть, была ли модель ранее сохранена.Однако это может быть ненадежным в случае, когда вы создали новый экземпляр модели, а затем инициализировали форму модели с этим экземпляром, прежде чем сохранить его.

Другая возможность, основанная на исходном коде BaseModelForm в Django 1.2, этопроверить self.instance._adding, который будет True, если модель была создана, и False в противном случае.Тем не менее, я не проверял это, поэтому YMMV.

Если первый вариант сработает, я бы порекомендовал использовать его, а не недокументированную функцию ModelForms - в будущем она изменится реже и, вероятно, станет более понятной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...