我在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的好标签。这可以(合理地)完成吗? :)
答案 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', )