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

时间:2017-11-06 14:00:22

标签: python django django-models django-admin

假设我有以下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使其可编辑。但是,我想把它保持为只读。

2 个答案:

答案 0 :(得分:4)

您可以在modeladmin类中将其添加到readonly_fields

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

admin.site.register(Book, BookAdmin)

答案 1 :(得分:1)

修改

我删除了我的答案,因为它和@DanielRoseman一样,但这只是为了澄清。这来自documentation

  

如果为False,该字段将不会显示在管理员或任何其他字段中   的ModelForm。在模型验证期间也会跳过它们。默认是   真。

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