在 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(主键)的主要内容,如果未能解决你的问题,请参考以下文章