首页 > 解决方案 > 在 ModelForm 中显示计算的字段值

问题描述

我的 Django 项目中有一个对象性能模型。

class Performance(models.Model):
   performance_id = models.AutoField(primary_key=True)
   name = models.CharField(_('Nom'), max_length=64)
   code = models.CharField(_('Code'), max_length=16, db_index=True, default='')
   type = models.InterField(...)
   value = models.CharField(...)

在 Admin 界面中,我有一个专门的PerformanceInlineAdmin和一个PerformanceInlineForm类。

Performance对象中,如果值字段以“$”开头,则该字段包含某种Reverse Polish Notation表达式(例如"100 450 +"...)。在这种情况下,显示的值应该是计算出来的表达式,而不是字段明文值。

但是我仍然没有找到可靠的解决方案。甚至不确定它应该在Form对象中处理。

欢迎任何建议。

Z。

标签: djangodjango-modelsdjango-forms

解决方案


您可以在InlineAdmin类中定义一个返回只读字段的方法:

class PerformanceInlineAdmin(admin.TabularInline):
    model = Performance
    fields = ['name', 'code', 'type', 'calculated_value']
    readonly_fields = ['calculated_value', ]

    def calculated_value(self, instance):
        if instance.value.startswith("$"):
            return polish_calc(instance.value.strip('$')
        else:
            return instance.value

    calculated_value.short_description = "Calculated value"

请注意,如果您自己定义一个calculated_value()方法Performance,您可以跳过内联管理类中的整个方法,只需在readonly_fields.


推荐阅读