Django Admin实现文档上传者自动关联当前登录用户
解决Django Admin自动设置当前登录用户为文档上传者的问题
实现步骤:
重写Admin类的
save_model方法
在你的DocumentAdmin类中添加这个钩子方法,保存文档时自动把当前登录用户赋值给uploaded_by字段:from django.contrib import admin from .models import Document class DocumentAdmin(admin.ModelAdmin): fieldsets = [ # 保留你原有的字段配置,比如文档标题、文件字段 ('文档基本信息', {'fields': ['title', 'file']}), # 若需要显示上传者但禁止修改,保留这一行;否则直接移除 ('上传记录', {'fields': ['uploaded_by']}), ] # 配置只读字段,避免手动修改上传者 readonly_fields = ('uploaded_by',) def save_model(self, request, obj, form, change): # 仅在新建文档时设置上传者(如需编辑时更新,去掉if判断) if not obj.pk: obj.uploaded_by = request.user # 调用父类方法完成最终保存 super().save_model(request, obj, form, change) admin.site.register(Document, DocumentAdmin)可选:隐藏上传者字段
如果不需要在Admin表单里展示uploaded_by(自动填充后无需用户干预),直接从fieldsets中移除该字段即可,save_model依然会自动完成赋值。
关键说明:
save_model是Django Admin内置的钩子,通过request.user可直接获取当前登录的管理员账户。obj.pk用于区分新建/编辑操作:obj.pk为空代表是新创建的文档,此时设置上传者;若要在编辑文档时同步更新上传者,删除if not obj.pk:判断即可。- 模型中
uploaded_by的null=True, blank=True配置,能避免极端场景(如未登录,Admin实际不会出现该情况)下的保存报错。
内容的提问来源于stack exchange,提问作者zutis
相关产品推荐
相关产品推荐

