24

Assuming I have the following 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)

I register this model in the admin.py using:

admin.site.register(Book)

When viewing an existing Book in admin, only the name field is visible.

My question is: Can the ID also be visible in this page?

Most of the answers I find are related to the admin list rather than the object instance page. One way to show the ID field is to make it editable by removing editable=False from the model definition. However, I would like to keep it read-only.

Demetris
  • 2,981
  • 2
  • 25
  • 33
  • Possible duplicate of [Django admin: How to display a field that is marked as editable=False' in the model?](https://stackoverflow.com/questions/3967644/django-admin-how-to-display-a-field-that-is-marked-as-editable-false-in-the-mo) – scharette Nov 06 '17 at 14:13

3 Answers3

43

You can add it to readonly_fields in the modeladmin class.

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

admin.site.register(Book, BookAdmin)
Daniel Roseman
  • 588,541
  • 66
  • 880
  • 895
3

EDIT

I removed my answer since it was the same as @DanielRoseman, but this is just for clarification. This is from the documentation:

If False, the field will not be displayed in the admin or any other ModelForm. They are also skipped during model validation. Default is True.

Therefore, using readonly_fields is the way to go.

scharette
  • 9,437
  • 8
  • 33
  • 67
0

To display the primary key (PK) of models in Django admin, you can customize the admin interface by creating a ModelAdmin class for your model and override the list_display attribute. Here's an example:

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)

In the example above, we created a YourModelAdmin class that inherits from admin.ModelAdmin. We added 'pk' to the list_display attribute to include the primary key in the list view of the model in the Django admin interface. You can also include other fields you want to display in the list view, separated by commas.

Rai Shahnawaz
  • 188
  • 11