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

Django后台外键下拉框显示自定义字段而非ID的实现方法

解决Django Admin中外键下拉框显示自定义字段的问题

核心方案:重写模型的__str__方法

Django Admin里,外键关联的下拉选项默认展示对应模型__str__方法的返回值。所以只要在books和classes模型里重写这个方法,返回你想展示的字段就行,完全不用改主键设置。

模型修改示例

假设你的models.py原代码是基础定义,修改后如下:

from django.db import models

class Books(models.Model):
    book_name = models.CharField(max_length=200)
    description = models.TextField()

    # 重写__str__,返回图书名称
    def __str__(self):
        return self.book_name

class Classes(models.Model):
    class_name = models.CharField(max_length=100)

    # 重写__str__,返回分类名称
    def __str__(self):
        return self.class_name

class MapBookClass(models.Model):
    book = models.ForeignKey(Books, on_delete=models.CASCADE)
    book_class = models.ForeignKey(Classes, on_delete=models.CASCADE)

    # 可选:如果想让这个关联模型在Admin列表里显示更清晰,也可以重写它的__str__
    def __str__(self):
        return f"{self.book.book_name} - {self.book_class.class_name}"

生效步骤

修改完模型代码后,重启Django服务,再进Admin后台操作MapBookClass,外键下拉框就会显示对应的book_name和class_name,不再是默认的主键ID。

额外小技巧

  • 如果需要显示多个字段的组合(比如图书名+出版年份),直接在__str__里拼接就行,比如return f"{self.book_name} ({self.publish_year})"
  • 这种方式完全保留Django自动生成的ID作为主键,不会影响数据库结构或原有逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:52:07