我的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。
答案 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
中进行声明。