django admin callable readonly_field详细名称

时间:2012-02-12 17:36:27

标签: django django-admin

我在Django管理员中使用可调用的只读字段,如下所示:

class ItemAdmin(admin.ModelAdmin):
    fields = ('real_value','estimated_value', )
    readonly_fields = ('estimated_value', )

class Item(models.Model):
    real_value = models.CharField(... , verbose_name=u'a nice label')

    def get_estimated_value(self):
        return ...some value...
    estimated_value = property(get_estimated_value)

现在,我只想为管理表单添加一些nice_value的好标签。这可以(合理地)完成吗? :)

4 个答案:

答案 0 :(得分:2)

class ItemAdmin(admin.ModelAdmin):
    fields = ('real_value','estimated_value', )
    readonly_fields = ('get_estimated_value', )

class Item(models.Model):
    real_value = models.CharField(... , verbose_name=u'a nice label')

    def get_estimated_value(self):
        return ...some value...

    get_estimated_value.short_description = 'Your verbose name'

答案 1 :(得分:1)

定义自定义ModelForm并在其中附加estimated_value的自定义字段。使用表单属性将此ModelForm连接到ItemAdmin。

答案 2 :(得分:1)

这是一个例子

class ItemForm(forms.ModelForm):
    estimated_value = forms.CharField(max_length=10)
    class Meta:
        model = Item
    def __init__(self, *args, **kwargs):
        super(ItemForm, self).__init__(*args, **kwargs)
        if kwargs.has_key('instance'):
            instance = kwargs['instance']
            self.initial['estimated_value'] = instance.estimated_value

然后将该表单添加到管理员

class ItemAdmin(admin.ModelAdmin):
    model = Item
    form = ItemForm

答案 3 :(得分:0)

除了上述内容之外,如果您希望它显示在更改列表中,您只需将该字段添加到管理员list_display:

class ItemAdmin(admin.ModelAdmin):
        model = Item
        form = ItemForm
        list_display = ('real_value', 'estimated_value', )