2017-08-29 69 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

相关问题