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

Django admin后台通过外键关联表显示role_name字段的实现方法

实现方案

以下是两种常用的实现方式,可根据需求选择:


方法1:修改Roles模型的__str__方法(全局生效,最简单)

Django Admin展示外键字段时,默认会调用关联模型的__str__方法,修改该方法即可让所有外键引用位置默认显示角色名称:

修改models.py

class Roles(models.Model):
    portal_name = models.CharField(_('Portal name'), max_length=100)
    role_name = models.CharField(_('Role_name'), max_length=50)

    # 新增__str__方法
    def __str__(self):
        return self.role_name

# 其余模型代码保持不变
class RolePermission(models.Model):
    module_name = models.CharField(_('Module name'), max_length=100)
    module_delete = models.BooleanField(default=False, help_text="Delete module. Default false, can't delete")
    module_edit = models.BooleanField(default=False, help_text="Edit module. Default false, can't edit")
    module_create = models.BooleanField(default=False, help_text="Create module. Default false, can't create")
    module_submit = models.BooleanField(default=False, help_text="Submit module, Default false.")
    module_role_id = models.ForeignKey('Roles', on_delete=models.CASCADE)

修改admin.py

把list_display中的module_role_id_id替换为外键字段名module_role_id即可:

@admin.register(RolePermission)
class RolePermissionAdmin(admin.ModelAdmin):
    list_display = ('module_name', 'module_role_id', 'module_delete', 'module_edit', 'module_create', 'module_submit')
    # 可选优化:加select_related避免N+1查询问题
    list_select_related = ('module_role_id',)

方法2:Admin自定义列(仅当前列表页生效,更灵活)

如果不想修改模型全局的展示逻辑,仅需要在RolePermission的列表页单独显示角色名,可直接在Admin类中新增自定义字段:

修改admin.py

@admin.register(RolePermission)
class RolePermissionAdmin(admin.ModelAdmin):
    # 把原来的module_role_id_id替换为自定义的字段名role_name
    list_display = ('module_name', 'role_name', 'module_delete', 'module_edit', 'module_create', 'module_submit')
    # 可选优化:关联查询减少数据库请求
    list_select_related = ('module_role_id',)

    # 自定义字段逻辑
    def role_name(self, obj):
        # 返回关联Roles表的role_name字段
        return obj.module_role_id.role_name
    # 配置列表页该列的表头名称
    role_name.short_description = '角色名称'

内容的提问来源于stack exchange,提问作者Denis Maksiura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:03