在ModelForm中显示计算出的字段值

时间:2019-03-29 20:03:35

标签: django django-models django-forms

我的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(...)

在管理界面中,我有一个专用的PerformanceInlineAdmin和一个PerformanceInlineForm类。

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

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

欢迎任何建议。

Z。

1 个答案:

答案 0 :(得分:0)

您可以在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中进行声明。