21

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,548
  • 2
  • 22
  • 31
  • 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

2 Answers2

37

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
  • 567,968
  • 59
  • 825
  • 842
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
  • 8,489
  • 6
  • 28
  • 62