2012-02-12 35 views
0

我使用調用在Django管理只讀場,就像這樣:Django管理調用readonly_field冗長的名字

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) 

現在,我只想補充一些漂亮的標籤estimated_value到管理形式。這可以(合理)完成嗎? :)

回答

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 
+0

那麼,該W只要「estimated_value」字段在readonly_fields列表中爲* not *,就可以按預期方式操作。當我把它放在列表中時,它會恢復到舊的行爲(通用標籤,根本沒有輸入字段)。 – frnhr 2012-02-12 22:01:19

+0

我最終在表單字段中使用自定義的ReadOnly小部件很像這樣:http://lazypython.blogspot.com/2008/12/building-read-only-field-in-django.html感謝您讓我走上正軌:) – frnhr 2012-02-12 22:04:23

1

定義一個自定義ModelForm並在那裏附上estimated_value的自定義字段。使用form屬性將此ModelForm連接到您的ItemAdmin。

0

除了上面的,如果你想它顯示更改名單上你可以只該字段添加到管理員list_display:

class ItemAdmin(admin.ModelAdmin): 
     model = Item 
     form = ItemForm 
     list_display = ('real_value', 'estimated_value',) 
0
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'