Ошибка при переопределении ModelAdmin.save_model () и ModelForm.save () - PullRequest
0 голосов
/ 27 января 2012

Я хочу переопределить функцию save () ModelForm, чтобы она обновляла поле в модели, если пользователь нажал определенную кнопку отправки.Я также хочу проверить некоторые другие поля и обновить их значения, и я сделал это с помощью функции save_model () ModelAdmin.Однако функция save_model () передается None для объекта.Если я закомментирую функцию save () формы, то функция save_model () будет работать, как и ожидалось.

Есть ли проблема с переопределением обоих, или я где-то допустил ошибку?

Вотминимальный пример:

admin.py:

class TestAdmin(admin.ModelAdmin):
    form = TestForm
    def save_model(self, request, obj, form, change):
        print 'test'
        super(PostAdmin, self).save_model(request, obj, form, change)

admin.site.register(TestModel, TestAdmin)

forms.py:

class TestForm(forms.ModelForm):
    class Meta:
        model = TestModel
    def save(self, force_insert=False, force_update=False, commit=True):
        print 'test'
        super(TestForm, self).save(commit=True)

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Ваш ModelForm должен вернуть экземпляр.

Насколько я помню, незадолго до save_model администратор делает save(commit=False) и передает несохраненный экземпляр save_model.Если вы ничего не вернете, save() == None.

return super(CategoryForm, self).save(commit=True)
0 голосов
/ 27 января 2012

Если вы переопределяете ModelAdmin.save_model и не вызываете super().save_model (в вашем примере, я вижу), вы должны явно вызвать form.save().

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

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