You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Django Admin后仍可编辑user字段,如何禁止管理员操作?

解决Django Admin中无法禁止编辑User字段的问题

先检查Admin类是否正确注册

确保你的Admin类已经和对应模型绑定注册,否则之前的readonly_fields配置不会生效,在admin.py末尾添加:

admin.site.register(Band, BandAdmin)
admin.site.register(Album, AlbumAdmin)
admin.site.register(Song, SongAdmin)

方法1:结合exclude和readonly_fields

如果只需展示User字段但禁止编辑,把User字段从可编辑表单中排除,同时保留只读展示:

class BandAdmin(admin.ModelAdmin):
    readonly_fields = ('user',)
    exclude = ('user',)

class AlbumAdmin(admin.ModelAdmin):
    readonly_fields = ('user',)
    exclude = ('user',)

class SongAdmin(admin.ModelAdmin):
    readonly_fields = ('user',)
    exclude = ('user',)

方法2:明确指定可编辑字段

如果模型字段较多,直接列出所有允许编辑的字段(不包含user),同时将user加入只读字段:

# 请根据你的模型实际字段调整示例中的字段列表
class BandAdmin(admin.ModelAdmin):
    readonly_fields = ('user',)
    fields = ('name', 'genre', 'user')

class AlbumAdmin(admin.ModelAdmin):
    readonly_fields = ('user',)
    fields = ('title', 'release_date', 'user')

class SongAdmin(admin.ModelAdmin):
    readonly_fields = ('user',)
    fields = ('title', 'duration', 'user')

额外加固:强制User字段不可篡改

如果User字段是关联当前登录用户,可通过save_model方法强制设置,确保管理员无法修改:

class BandAdmin(admin.ModelAdmin):
    readonly_fields = ('user',)
    exclude = ('user',)

    def save_model(self, request, obj, form, change):
        if not obj.pk:
            obj.user = request.user
        super().save_model(request, obj, form, change)

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:42:15