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

如何在Django Admin面板中显示订单关联的product_name与customer_name

解决Django Admin中订单关联的商品/客户名称无法正常展示的问题

这个问题我之前也碰到过,本质是Django里ForeignKey字段在Admin列表中的显示逻辑导致的:默认情况下,关联模型会调用自身的__str__()方法返回字符串,如果你的Product和Customer模型没定义这个方法,Admin就会显示类似<Product object>的默认占位符,看起来像是没展示出名称。

下面给你两种可行的解决方案,按需选择:

方案一:给关联模型添加__str__()方法(全局生效)

这是最推荐的方式,因为它会让所有引用Product或Customer对象的地方都显示名称,而不只是Admin面板。

修改你的models.py,给Product和Customer模型添加__str__()方法:

class Product(models.Model):
    # 假设你的Product模型有name字段(如果字段名不同,替换成你实际的字段,比如title)
    name = models.CharField(max_length=100)
    # 其他原有字段...
    
    def __str__(self):
        return self.name  # 返回商品名称

class Customer(models.Model):
    # 假设你的Customer模型有name字段
    name = models.CharField(max_length=100)
    # 其他原有字段...
    
    def __str__(self):
        return self.name  # 返回客户名称

修改后重启Django服务,刷新Admin面板,就能看到list_display里的product和customer列正常显示名称了。

方案二:在Admin类中自定义显示方法(仅Admin列表生效)

如果不想修改模型的全局__str__行为,或者需要在Admin里展示关联模型的其他属性,可以在AdminOrders类中添加自定义方法:

修改你的admin.py:

class AdminOrders(admin.ModelAdmin):
    # 替换原有list_display,用自定义方法代替直接的product/customer字段
    list_display = ['get_product_name', 'get_customer_name', 'quantity', 'address', 'phone', 'price', 'date', 'status']
    
    def get_product_name(self, obj):
        # 这里的name替换成你Product模型中存储商品名称的实际字段名
        return obj.product.name
    # 设置Admin列表中该列的显示名称
    get_product_name.short_description = '商品名称'
    
    def get_customer_name(self, obj):
        # 这里的name替换成你Customer模型中存储客户名称的实际字段名
        return obj.customer.name
    get_customer_name.short_description = '客户名称'

同样重启服务后,Admin列表就会显示对应的商品和客户名称了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:32:45