Django后台中如何自动将请求用户分配给模型外键User字段
首先修正你的模型代码里的无效参数:author字段的auto_created=True对於外键来说是多余的,直接去掉即可;另外related_name建议改成小写的"blogs",更符合Django命名规范,避免和User模型本身属性混淆:
class Blog(models.Model): title = models.CharField(max_length=300) content = RichTextField() # 修正后的author字段 author = models.ForeignKey(User, related_name="blogs", on_delete=models.CASCADE) date = models.DateTimeField(auto_now_add=True)
针对后台创建实例时自动赋值author的需求,最直接的方案是重写Django Admin的save_model方法,在保存时自动把当前登录的管理员用户赋值给author字段:
在项目的admin.py文件中,定义Blog的Admin类并实现重写逻辑:
from django.contrib import admin from .models import Blog class BlogAdmin(admin.ModelAdmin): # 可选:指定后台列表显示的字段 list_display = ('title', 'author', 'date') def save_model(self, request, obj, form, change): # 仅在新建Blog实例且author未赋值时,自动设置为当前登录管理员 if not change and not obj.author: obj.author = request.user super().save_model(request, obj, form, change) admin.site.register(Blog, BlogAdmin)
这个逻辑的好处是:仅针对后台新建操作自动赋值author,修改已有Blog时不会覆盖原作者;如果需要调整规则(比如修改时也允许重新设置作者),直接修改判断条件即可。
另外也可以通过重写模型的save方法实现,但模型层无法直接获取request对象,需要额外传参,相比之下Admin层的方案更简单直接。
内容的提问来源于stack exchange,提问作者Wajid
相关产品推荐
相关产品推荐

