首页 > 解决方案 > Django Admin - 预填充字段并设置为只读

问题描述

我想在创建或更新对象时自动在模型中设置一个字段(当前用户)并将其设为只读,因此用户无法更改它:

为了预填充该字段:

@admin.register(Model)
class ModelAdmin(admin.ModelAdmin):
    list_display = ('field_1', 'user')

    def get_form(self, request, obj=None, **kwargs):
        form = super(ModelAdmin, self).get_form(request, obj, **kwargs)
        form.base_fields['user'].initial = request.user
        return form

这可行,但是当我想使用以下方法将字段设为只读时:

readonly_fields=('user', )

该应用程序因错误而崩溃:

KeyError at /admin/api/model/add/
'user'

任何人都可以帮助我并解释我如何使用 django admin 来实现我的目标吗?

谢谢!

标签: djangofieldadminreadonlypopulate

解决方案


我发现的一个解决方法是:

form.base_fields['user'].disabled = True

您还可以通过以下方式添加帮助文本:

form.base_fields['user'].help_text = "some help text"

所以在你的代码中它将是:

    def get_form(self, request, obj=None, **kwargs):
        form = super(ModelAdmin, self).get_form(request, obj, **kwargs)
        form.base_fields['user'].initial = request.user
        form.base_fields['user'].disabled = True
        form.base_fields['user'].help_text = "This field is not editable"
        return form

然后你不必使用readonly_fields


推荐阅读