【问题标题】:Django admin - prevent changing a field after it has become trueDjango admin - 在字段变为 true 后防止更改字段
【发布时间】:2022-11-12 13:05:32
【问题描述】:

我在 admin.py 中注册了一个模型:

class OrderAdmin(admin.ModelAdmin):
    list_display = ('org_name', 'address', 'total_cost', 'phone', 'data_time', 'is_called', 'is_payed')
    search_fields = ('org_name', 'phone')
    list_filter = ('data_time', 'total_cost', 'data_time')
    list_editable = ('is_called', 'is_payed')
    readonly_fields = ('data_time', 'user', 'total_cost')
    inlines = [OrderItemsAdmin, ]

我需要做类似的事情:

class OrderAdmin(admin.ModelAdmin):
    list_display = ('org_name', 'address', 'total_cost', 'phone', 'data_time', 'is_called', 'is_payed')
    search_fields = ('org_name', 'phone')
    list_filter = ('data_time', 'total_cost', 'data_time')
    list_editable = ('is_called', 'is_payed')
    readonly_fields = ('data_time', 'user', 'total_cost')
    inlines = [OrderItemsAdmin, ]

    if 'is_called' == True:
        readonly_fields.append('is_called')

我认为这是可能的,所以问题是如何做到这一点?

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    您可以使用ModelAdmin.get_readonly_fields() 方法。

    试试这个:

    class OrderAdmin(admin.ModelAdmin):
        ...
    
        def get_readonly_fields(self, request, obj=None):
            readonly_fields = super(OrderAdmin, self).get_readonly_fields(request, obj)
    
            if obj.is_called:
                readonly_fields.append("is_called")
                return readonly_fields
    
            return readonly_fields
    

    【讨论】:

    • 谢谢! readonly_fields 是一个元组,所以我对其进行了一些编辑,效果很好!
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多