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

w1jd8yoj  于 2023-06-25  发布在  Go
关注(0)|答案(3)|浏览(164)

假设我有以下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)

在admin中查看现有的Book时,只有name字段可见。
我的问题是:该ID也可以在此页面中显示吗?
我找到的大多数答案都与管理员列表有关,而不是对象示例页面。显示ID字段的一种方法是通过从模型定义中删除editable=False使其可编辑。但是,我希望将其保持为只读。

bhmjp9jg

bhmjp9jg1#

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

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

admin.site.register(Book, BookAdmin)
p5cysglq

p5cysglq2#

编辑

我删除了我的答案,因为它与@DanielRoseman相同,但这只是为了澄清。这来自文档:
如果为False,则该字段将不会显示在admin或任何其他ModelForm中。在模型验证期间也会跳过它们。默认值为True。
因此,使用readonly_fields是正确的方法。

k4ymrczo

k4ymrczo3#

要在Django admin中显示模型的主键(PK),您可以通过为模型创建ModelAdmin类并覆盖list_display属性来自定义管理界面。下面是一个例子:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('pk', '__str__',)  # Add 'pk' to the list_display

admin.site.register(YourModel, YourModelAdmin)

在上面的示例中,我们创建了一个继承自admin.ModelAdmin的YourModelAdmin类。我们将'pk'添加到list_display属性中,以在Django管理界面的模型列表视图中包含主键。您还可以包括要在列表视图中显示的其他字段,字段之间用逗号分隔。

相关问题