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

Django Admin实现文档上传者自动关联当前登录用户

解决Django Admin自动设置当前登录用户为文档上传者的问题

实现步骤:

  1. 重写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)
    
  2. 可选:隐藏上传者字段
    如果不需要在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:20:36