配置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
相关产品推荐
相关产品推荐

