Как определить, добавлен или отредактирован ли объект obj внутри ModelForm.clean? - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу проверить предоставленные пользователем данные по-разному, независимо от того, добавляет ли пользователь новый объект или изменяет существующий.Нет атрибута модели, кроме идентификатора, который я мог бы проверить в БД, если объект уже существует (если он существует в БД, он добавляется).В других методах, таких как save_model, передается параметр add, так что вы можете проверить его, но в modelform.clean такого параметра нет.Как сделать эту проверку внутри modelform.clean?

MyModelForm(forms.ModelForm):
    def clean(self):
        if add :
            validation_A()
        else:
            validantion_B()

1 Ответ

0 голосов
/ 24 сентября 2018

Объект, который не существует на уровне базы данных, имеет 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.

...