在Django Admin中根据另一个字段的值创建一个readonly字段

时间:2012-07-22 14:34:42

标签: django django-models django-forms

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

3 个答案:

答案 0 :(得分:20)

您可以覆盖管理员的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

答案 1 :(得分:1)

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

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

可以找到相关文档here

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

答案 2 :(得分:0)

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