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

Django:如何在Admin中显示外键关联对象的名称属性?

解决Django Admin中显示艺术家名称而非ID的问题

首先,先修正你模型里的一个小错误:models.IntField() 应该是 models.IntegerField(),不然运行时会抛出错误哦。

接下来分两部分解决你的核心问题:

1. 让创建/编辑画作时的艺术家下拉框显示名称

Django 默认会用模型的 __str__ 方法来渲染 ForeignKey 选项的显示文本。你只需要给 Artist 模型添加这个方法,就能替换掉默认的「对象[ID]」格式:

class Artist(models.Model):
    name = models.CharField(max_length=120)
    age = models.IntegerField()  # 修正IntField为正确的IntegerField

    def __str__(self):
        return self.name  # 返回艺术家名称,作为模型实例的字符串标识

添加之后,你在Admin里创建或编辑画作时,艺术家的下拉选项就会直接显示具体的名称,而不是枯燥的ID标识了。

2. 在Admin列表中显示艺术家名称(解决list_display的问题)

你直接写 artist = Artist.name 是不符合Django规则的,list_display 支持两种方式来显示关联字段内容:

方式一:用双下划线关联字段

直接在 list_display 里使用 artist__name,Django会自动关联查询艺术家的名称:

from django.contrib import admin
from .models import Artist, Paintings

class PaintingsAdmin(admin.ModelAdmin):
    list_display = ('painting_name', 'artist__name')  # 通过双下划线关联艺术家名称字段

admin.site.register(Artist)
admin.site.register(Paintings, PaintingsAdmin)

方式二:自定义方法实现更灵活的显示

如果需要额外的显示逻辑(比如同时展示名称和年龄),可以自定义一个方法:

class PaintingsAdmin(admin.ModelAdmin):
    list_display = ('painting_name', 'get_artist_info')

    def get_artist_info(self, obj):
        return f"{obj.artist.name}({obj.artist.age}岁)"  # 自定义显示内容
    get_artist_info.short_description = '艺术家信息'  # 设置列表表头的名称

这样在画作的Admin列表页,就能清晰看到对应的艺术家信息了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:07:31