如何在Django管理员中切换readonly_fields?

时间:2017-11-03 01:38:01

标签: python django admin

需要向django管理页面添加按钮,如果要编辑模型,请按编辑然后编辑所需内容并保存。保存后打开它时,它必须再次不可编辑。那么,怎么做呢?

我有简单的admin.py代码:

from django.contrib import admin
from .models import Order

class OrderAdmin(admin.ModelAdmin):
    list_display = ['__str__', 'email', 'project_type', 'price']
    list_filter = ['email', 'first_name', 'project_type', 'price']
    readonly_fields = ('first_name', 'last_name', 'email', 'phone', 'project_type', 'price')
    fields = ('first_name', 'last_name', 'email', 'phone', 'project_type', 'services', 'price', 'slug')

    def has_add_permission(self, request):
        return False

admin.site.register(Order, OrderAdmin)

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,首先需要在 models.py 创建新的布尔字段(在我的例子中名为 is_editable )并设置默认值为false。然后将我的代码粘贴到admin.py:

def get_readonly_fields(self, request, obj=None):
    if obj: # if object is created
        if obj.is_editable == False:
            return ['first_name', 'last_name', 'email', 'phone', 'project_type', 'services',  'price', 'slug']
        else:
            return []
    else:
        return []

现在,如果你想编辑你的模型,你需要检查这个布尔值,然后才编辑。