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

Django后台中如何自动将请求用户分配给模型外键User字段

解决Django后台创建Blog时自动赋值author字段的问题

首先修正你的模型代码里的无效参数: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:10:58