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, если только ваш сценарий не относится только к странице администратора.
вы можете сделать это, добавив метод сохранения в вашу модель например
class Foo(models.Model):
....
....
def save(self, *args, **kwargs):
self.calc_me = calc_at_now()
super(Collector, self).save(*args, **kwargs)
давайте попробуем