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

Django Admin中编辑Refbook时如何显示关联的只读版本列表

两种实现方案

方案一:用TabularInline展示只读版本表格

这种方式保留表格结构,能清晰展示每个版本的版本号和日期,实现步骤如下:

  1. 在admin.py中定义关联模型的Inline类:
from django.contrib import admin
from .models import Refbook, VersionRefbook

class VersionRefbookInline(admin.TabularInline):
    model = VersionRefbook
    # 设置所有字段为只读
    readonly_fields = ['version', 'date']
    # 禁止添加新版本(可选,按需设置)
    extra = 0
    # 不允许删除版本(可选)
    can_delete = False
  1. 在RefbookAdmin中注册这个Inline:
@admin.register(Refbook)
class RefbookAdmin(admin.ModelAdmin):
    list_display = ['id', 'code', 'name']
    inlines = [VersionRefbookInline]

编辑Refbook实例时,页面下方会出现一个只读表格,列出该Refbook的所有关联版本。

方案二:用逗号分隔文本展示版本列表

如果想要更紧凑的展示形式,可以把版本信息合并成一行逗号分隔的文本,有两种实现方式:

方式1:在模型中定义方法

修改Refbook模型,添加生成版本字符串的方法:

class Refbook(models.Model):
    code = models.CharField(max_length=100, unique=True)
    name = models.CharField(max_length=300)
    description = models.TextField()   

    def get_versions(self):
        # 格式化为「版本号 (日期)」的形式,用逗号分隔
        return ', '.join([f"{v.version} ({v.date})" for v in self.versions.all()])
    # 设置admin中显示的字段名称
    get_versions.short_description = '可用版本'

然后在RefbookAdmin中把这个方法加入只读字段:

@admin.register(Refbook)
class RefbookAdmin(admin.ModelAdmin):
    list_display = ['id', 'code', 'name']
    readonly_fields = ['get_versions']
    # 也可以用fieldsets分组展示
    fieldsets = (
        ('基本信息', {'fields': ('code', 'name', 'description')}),
        ('版本信息', {'fields': ('get_versions',)}),
    )

方式2:在Admin中定义自定义方法(无需修改模型)

如果不想改动模型,直接在RefbookAdmin中定义方法即可:

@admin.register(Refbook)
class RefbookAdmin(admin.ModelAdmin):
    list_display = ['id', 'code', 'name']
    readonly_fields = ['display_versions']

    def display_versions(self, obj):
        return ', '.join([f"{v.version} ({v.date})" for v in obj.versions.all()])
    display_versions.short_description = '可用版本'

关于你之前的问题

你之前在模型中写了get_versions但没在admin中显示,原因是没有在RefbookAdmin的readonly_fields或fields中声明这个方法,Django Admin只会展示你明确指定的字段或方法。

内容的提问来源于stack exchange,提问作者Артур

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:20:19