Django Admin后台保存模型时无法获取request.user问题排查
问题原因及解决方案
你把save_model方法写错位置了——这个方法是Django Admin的ModelAdmin类的钩子方法,并非模型类(Model)的方法,所以你写在Project模型里的代码根本不会被执行,自然无法获取到登录状态下的request.user。
修正步骤:
- 调整models.py:删除模型类中的
save_model方法,仅保留字段定义:
from django.conf import settings class Project(models.Model): # 你的其他字段... added_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.PROTECT)
- 在admin.py中定义并注册ModelAdmin:将
save_model方法移至ModelAdmin类内:
from django.contrib import admin from .models import Project class ProjectAdmin(admin.ModelAdmin): def save_model(self, request, obj, form, change): if not obj.pk: # 仅在首次创建对象时设置added_by obj.added_by = request.user super().save_model(request, obj, form, change) admin.site.register(Project, ProjectAdmin)
完成上述修改后,在admin后台创建Project对象时,save_model会被正确触发,request.user即为当前登录的管理员用户,可正常赋值给added_by字段。
内容的提问来源于stack exchange,提问作者HBMCS
相关产品推荐
相关产品推荐

