【问题标题】:Django - creaing a custom model admin form field, passing the model instance to set a read only attributeDjango - 创建自定义模型管理表单字段,传递模型实例以设置只读属性
【发布时间】:2017-08-29 14:47:08
【问题描述】:

我知道您可以在模型的 admin.py 中设置 readonly_fields,但我正在尝试将字段设置为只读,这取决于它在数据库中的(保存的)值。

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

例如

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 而不是模型本身中做到这一点?我无法将模型实例传递给这个自定义类,而且我确信无论如何都不是这样做的!

非常感谢!

【问题讨论】:

    标签: django


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2015-04-16
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 2021-11-16
      • 2023-03-07
      相关资源
      最近更新 更多