Django - 创建自定义模型管理表单字段,传递模型实例以设置只读属性

时间:2017-08-29 14:47:08

标签: django

我知道你可以在模型的admin.py中设置readonly_fields但是我试图让一个字段只读取依赖于它在数据库中的(保存的)值。

我可以创建自定义字段类,但无法传递模型实例的值,因此我可以实现上述目的。

例如

div {
    width: 300px;
    background:   orange;
    border: 25px solid green;
    padding: 25px;
    margin: 25px;
}

在模型中

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)

有没有办法在admin.py中而不是在模型本身中执行此操作?我无法将模型实例传递给这个自定义类,我确信不管怎么说都不是这样做的!

非常感谢!

1 个答案:

答案 0 :(得分: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