是否可以在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
指定的未知字段(....)感谢。
答案 0 :(得分:1)
我并不完全确定你想要的是什么。但大概是,如果不在管理员中更改字段值,我想你只想在那里显示它?
在这种情况下,你可以在模型中定义一个方法,比如'name_language()',然后通过list_display显示它:
list_display = ('field1', 'field2', 'name_language')