Django Admin。显示非模型字段

时间:2014-10-06 18:59:20

标签: python django django-admin

是否可以在django admin中显示非模型字段?

例如,我有模型:

class TestModel(models.Model):
     value = models.DecimalField(max_digits=5, decimal_places=2)

在Django管理员中,我想显示自定义字段 "系数1","系数2"这不是模型字段,所以我不想将其值保留在数据库中。该系数将用于计算"值"模型领域。

使用某种算法生成系数。 (例如,我们有模型CoefficientGenerator来保存其名称和值。)

此字段是动态生成的,因此我无法在模型体中声明它。但用户必须拥有 在使用django admin保存实例之前编辑系数的可能性。

我试图在ModelAdmin中覆盖方法get_fieldsets:

class TestModelAdmin(ModelAdmin):
    def get_fieldsets(self, request, obj=None):
        fieldsets = super(ProductAdmin, self).get_fieldsets(request, obj)
        for c in CoefficientGenerator.objects.all():
            fieldsets[0][1]['fields'].append(c.name)
        return fieldsets

还要在我的自定义管理员表单中覆盖 init

def __init__():
    ...
    for c in CoefficientGenerator.objects.all():
        field = forms.CharField(required=False, widget=forms.Textarea, label=c.name)
        self.fields[c.name] = field

但它对我不起作用。我收到了错误: 为TestModel

指定的未知字段(....)

感谢。

1 个答案:

答案 0 :(得分:1)

我并不完全确定你想要的是什么。但大概是,如果不在管理员中更改字段值,我想你只想在那里显示它?

在这种情况下,你可以在模型中定义一个方法,比如'name_language()',然后通过list_display显示它:

list_display = ('field1', 'field2', 'name_language')