在 Django 管理对象页面中显示对象 ID(主键)

Posted

技术标签:

【中文标题】在 Django 管理对象页面中显示对象 ID(主键)【英文标题】:Show object ID (primary key) in Django admin object page 【发布时间】:2018-04-18 17:12:54 【问题描述】:

假设我有以下model.py

class Book(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=100, unique=True)

我在admin.py 中注册了这个模型:

admin.site.register(Book)

在管理员中查看现有的Book 时,只有name 字段可见。

我的问题是:ID 是否也可以在此页面中显示?

我找到的大多数答案都与管理列表有关,而不是与对象实例页面有关。显示 ID 字段的一种方法是通过从模型定义中删除 editable=False 使其可编辑。但是,我想将其保持为只读状态。

【问题讨论】:

Django admin: How to display a field that is marked as editable=False' in the model?的可能重复 【参考方案1】:

您可以将其添加到模型管理类中的readonly_fields

class BookAdmin(admin.ModelAdmin):
    readonly_fields = ('id',)

admin.site.register(Book, BookAdmin)

【讨论】:

IMO 的理想快速解决方案,与添加它相比,并且可以选择更改值【参考方案2】:

编辑

我删除了我的答案,因为它与@DanielRoseman 相同,但这只是为了澄清。这是来自documentation:

如果为 False,该字段将不会显示在 admin 或任何其他 模型形式。在模型验证期间它们也会被跳过。默认为 没错。

因此,使用readonly_fields 是可行的方法。

【讨论】:

以上是关于在 Django 管理对象页面中显示对象 ID(主键)的主要内容,如果未能解决你的问题,请参考以下文章

Django 管理屏幕不按名称显示实体

django 管理界面 - 如何在更改列表视图中折叠/展开对象详细信息?

禁止 Django 自引用外键指向自身对象

如何在 Django 管理页面中显示外键的属性

Django Admin后台管理

Django-cms:“设置”对象没有属性“SITE_ID”