【发布时间】:2021-10-13 01:41:09
【问题描述】:
在正常(无管理员视图)中,如果有一个由后端计算的字段,而不是在表单中,则可以这样处理:
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()
因为它没有记录,重写这个函数是不是有点hacky?
或者重写模型的清理方法怎么样?
class Foo(models.Model):
def clean(self):
self.calc_me = calc_at_now()
super().clean()
推荐的方法是什么。尝试以正确的方式开始使用表单。
【问题讨论】:
标签: django django-forms django-admin