2017-08-29 74 views
0

我知道你可以在模型的admin.py中設置readonly_fields,但我試圖讓一個字段只讀取決於它的(已保存)值在數據庫中。Django - 創建自定義模型管理表單字段,傳遞模型實例以設置只讀屬性

我可以創建自定義字段類,但無法傳遞模型實例的值,所以我可以實現上述目的。

class MytypeField(models.CharField): 

    def __init__(self,*args,**kwargs): 

    PAGE_LAYOUT_CHOICES = (
     ('column1','One Column'), 
     ('column2','Two Columns') 
    ) 

    kwargs['max_length'] = 7 
    kwargs['choices'] = PAGE_LAYOUT_CHOICES 
    kwargs['default'] = 'column1' 

    super(MytypeField,self).__init__(*args,**kwargs) 

和模型

layout = MytypeField() 

有沒有辦法做到這一點在admin.py而不是模型本身?我無法將模型實例傳遞給這個自定義類,並且我確信這不是無論如何都不要這樣做!

非常感謝!

回答

1

是你可以在模型管理,模型管理有方法get_readonly_fields

class MyAdmin(admin.ModelAdmin): 
    def get_readonly_fields(self, request, obj=None): 
     if obj and obj.layout: 
      return self.readonly_fields + ('layout',) 
     return self.readonly_fields 
+0

這是偉大的 - 非常感謝 - 完美的作品! – Newfoundland

相關問題