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

如何在Django Admin中注册含created_user属性的模型?

Django Admin 配置含created_user属性的模型

下面是完整的配置步骤,涵盖注册、自动填充、权限控制等核心需求:

1. 基础模型注册(最简版)

如果只是要在Admin里显示模型,直接注册即可,但此时created_user字段不会自动处理,需要后续优化:

from django.contrib import admin
from .models import 你的模型类名

admin.site.register(你的模型类名)

2. 自定义Admin类,控制字段显示与编辑权限

创建自定义的Admin类,指定列表页显示字段,同时把created_user设为只读(避免手动修改):

class 你的模型Admin(admin.ModelAdmin):
    # 列表页展示的字段,把created_user加进去
    list_display = ('字段1', '字段2', 'created_user', 'created_at')
    # 表单页设为只读,禁止手动修改创建者
    readonly_fields = ('created_user',)

# 注册时关联自定义Admin类
admin.site.register(你的模型类名, 你的模型Admin)

如果不想让created_user出现在表单里,也可以用exclude = ('created_user',)替代readonly_fields。

3. 自动填充created_user为当前登录管理员

重写save_model方法,在新增对象时自动把当前登录的Admin用户赋值给created_user:

class 你的模型Admin(admin.ModelAdmin):
    list_display = ('字段1', '字段2', 'created_user', 'created_at')
    readonly_fields = ('created_user',)

    def save_model(self, request, obj, form, change):
        # 仅在新增对象时设置创建者(change为False表示新增)
        if not change:
            obj.created_user = request.user
        # 调用父类方法完成保存
        super().save_model(request, obj, form, change)

admin.site.register(你的模型类名, 你的模型Admin)

4. 可选功能:按创建者过滤列表

如果需要在Admin列表页快速筛选某个用户创建的内容,添加list_filter:

class 你的模型Admin(admin.ModelAdmin):
    list_display = ('字段1', '字段2', 'created_user', 'created_at')
    readonly_fields = ('created_user',)
    # 右侧添加创建者过滤器
    list_filter = ('created_user',)

    def save_model(self, request, obj, form, change):
        if not change:
            obj.created_user = request.user
        super().save_model(request, obj, form, change)

5. 可选功能:限制用户仅查看自己创建的内容

如果要实现普通Admin用户只能看到自己创建的对象,重写get_queryset方法:

class 你的模型Admin(admin.ModelAdmin):
    list_display = ('字段1', '字段2', 'created_user', 'created_at')
    readonly_fields = ('created_user',)

    def save_model(self, request, obj, form, change):
        if not change:
            obj.created_user = request.user
        super().save_model(request, obj, form, change)

    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        # 超级用户可以查看所有内容,普通用户仅看自己创建的
        if request.user.is_superuser:
            return queryset
        return queryset.filter(created_user=request.user)

内容的提问来源于stack exchange,提问作者Brayan Pieto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:19:22