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

如何在Django Admin中显示Post关联的Trainer创建者邮箱属性

Django Admin 正确显示Post创建者邮箱的配置方法

问题根因

你当前遇到的展示错误核心有两个原因:

  • 新建Post时没有自动将登录的培训师账号绑定到trainer字段,默认使用了ID=1的超级管理员作为创建者,所以所有Post都显示管理员邮箱
  • PostAdmin的fields配置未包含trainer字段,即便设置了只读也无法在详情页展示创建者信息

修改步骤

1. 修正模型冗余代码(可选)

UserTrainer模型中定义的get_email方法存在语法错误,你没有用到该方法可以直接删除,需要保留的话修改为:

# models.py UserTrainer类内
def get_email(self):
    # 直接返回当前实例的email即可,不需要调用object属性
    return self.email

2. 修改PostAdmin配置

重写save_model方法实现创建Post时自动绑定当前登录用户,同时把trainer加入展示字段:

# admin.py PostAdmin类修改为以下内容
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('article', 'slug','trainer')
    list_display_links = ('article',)
    # 新增trainer到字段配置,详情页才会展示
    fields = ('article', 'slug', 'keywords', 'text', 'trainer')
    readonly_fields = ('trainer',)

    def save_model(self, request, obj, form, change):
        # 仅在新建Post时赋值创建者,修改时不改动原有创建者
        if not change:
            obj.trainer = request.user
        super().save_model(request, obj, form, change)

注意:请确认你已经在项目settings.py中配置了自定义用户模型:AUTH_USER_MODEL = "你的blog子应用名.UserTrainer",否则request.user可能不是UserTrainer实例,导致赋值错误。

效果说明

修改后培训师登录账号创建Post时,系统会自动将当前登录的培训师账号赋值给trainer字段,你的UserTrainer模型已经定义了__str__方法返回邮箱,所以Admin列表页和详情页的trainer字段都会直接展示对应用户的邮箱。历史已创建的Post可以手动在数据库或Admin后台修改trainer字段值更新展示。

内容的提问来源于stack exchange,提问作者Bohdan Sizomin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:24:03