【问题标题】:Making a field readonly in Django Admin, based on another field's value根据另一个字段的值在 Django Admin 中使字段只读
【发布时间】:2012-07-21 00:24:23
【问题描述】:

如何根据另一个字段的值使 Django Admin 中的字段只读或不可编辑? 我用过readonly_fields=('amount',),但这不能解决我的问题,因为我需要根据另一个字段来管理它。

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    您可以覆盖管理员的get_readonly_fields 方法:

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

    【讨论】:

    • 这可以在保持字段排序的同时完成吗?
    【解决方案2】:

    要从另一个字段填写一个字段,您需要将prepopulated_fields 属性添加到相关的ModelAdmin 类。例如:

    class PostAdmin(admin.ModelAdmin):
        prepopulated_fields = {"slug": ("title",)}
    

    相关文档可以在here找到。

    但是,在我目前使用的 django 版本(1.3)中,当同时使用readonly_fields 时,这似乎会产生错误。

    【讨论】:

      【解决方案3】:

      在类的主体中声明任何永久 readonly_fields,因为 readonly_fields 类属性将从验证中访问

      【讨论】:

        猜你喜欢
        • 2019-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 2021-06-22
        • 2018-06-03
        • 2013-02-10
        • 2017-02-28
        • 1970-01-01
        相关资源
        最近更新 更多