Объект, который не существует на уровне базы данных, имеет id
(ну, возможно, лучше использовать pk
), который равен None
(поскольку id
определяется при вставке в базу данных,Django не присваивает этот идентификатор).
Таким образом, мы можем проверить, может ли self.instance.pk is None
:
MyModelForm(forms.ModelForm):
def clean(self):
if <b>self.instance.pk is None</b>: # add
validation_A()
else: # edit
validantion_B()
Конечно, вышеупомянутый метод может быть «подделан» в том смысле, что, прежде чем вы передадитеобъект в создании, вы можете установить id
на None
, но объект Model.save(..)
также использует этот факт, чтобы решить, выполнять ли INSERT INTO
или UPDATE
.