Django Admin с пользовательской формой; вычисляемое поле отсутствует в форме

В обычном (не админском представлении), если у вас есть поле, которое вычисляется бэкендом, а не в форме, вы можете поступить с ним следующим образом:

obj = form.save(commit=False)
obj.calc_me = calc_at_now()
obj.save

Допустим, у меня есть модель администратора для Foo

@admin.register(Foo)
class FooAdmin(admin.ModelAdmin):
    exclude = ['calc_me']

Как сказать Django, что когда он сохраняет Foo, вычислять требуемое поле с помощью obj.calc_me = calc_at_now()?

В BaseModelAdmin я вижу, что есть метод:

    def save_model(self, request, obj, form, change):
        """
        Given a model instance save it to the database.
        """
        obj.save()

Не слишком ли халтурно переопределять эту функцию, поскольку она не документирована? Каков рекомендуемый подход. Пытаюсь начать использовать формы правильно.

Я бы рекомендовал использовать сигнал pre_save или post_save, если только ваш сценарий не относится только к странице администратора.

https://docs.djangoproject.com/en/3.2/topics/signals/

вы можете сделать это, добавив метод сохранения в вашу модель например

class Foo(models.Model):
    ....
    ....
    def save(self, *args, **kwargs):
        self.calc_me = calc_at_now()
        super(Collector, self).save(*args, **kwargs)

давайте попробуем

Вернуться на верх