---
slug: "django-5-admin-inline-hidden-dict"
title: "Django を 5.1 にアップグレードしたら、管理サイトの Inline で、プライマリーキーが表示される場所に `{'name': 'id', 'label': 'ID', 'help_text': '', 'field': 'id', 'is_hidden': True}` のような文字列が表示される場合の対応"
description: "Django 5 の Admin Inline で、特定の `ModelForm` フィールドを `hidden` にしつつ、初期値を dict で渡す書き方。`formfield_overrides` と `get_initial` を組み合わせるパターン。"
url: "https://www.ytyng.com/blog/django-5-admin-inline-hidden-dict"
publish_date: "2025-03-13T09:25:40Z"
created: "2025-03-13T09:25:40Z"
updated: "2026-05-11T13:21:27.120Z"
categories: ["Django"]
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20250503/4cac1f86c8454d71ba6e93ce6cb23bad.png.webp?width=768"
has_video: true
has_music: true
video_urls: ["https://media.ytyng.net/ytyng-blog/319/featured-video-1.mp4", "https://media.ytyng.net/ytyng-blog/319/featured-video-2.mp4", "https://media.ytyng.net/ytyng-blog/319/featured-video-3.mp4"]
music_urls: ["https://media.ytyng.net/ytyng-blog/319/featured-music-319-6.mp3", "https://media.ytyng.net/ytyng-blog/319/featured-music-319-7.mp3"]
lang: "ja"
---

# Django を 5.1 にアップグレードしたら、管理サイトの Inline で、プライマリーキーが表示される場所に `{'name': 'id', 'label': 'ID', 'help_text': '', 'field': 'id', 'is_hidden': True}` のような文字列が表示される場合の対応

![画像](https://media.ytyng.com/20250313/88f7df58faac497ba44960cf7b67bf1d.png)

Grappeli を使っている場合のみに発生するかもしれない。

Django5 あたりから、 [django.contrib.admin.helpers.AdminReadonlyField](https://github.com/django/django/blob/main/django/contrib/admin/helpers.py#L200) のインスタンス変数 field に is_hidden というキーが追加された。



このキーは、AdminForm のウィジェットが `HiddenInput` などの場合に True になる。([コード](https://github.com/django/django/blob/main/django/contrib/admin/helpers.py#L220-L231))

そして、`Form` の `_meta.widgets['フィールド名']` が存在しない場合、ウィジェットは `HiddenInput` になる([コード](https://github.com/django/django/blob/e03440291b0599934da73b7dfbd2ccf7ec7270d8/django/forms/models.py#L1023-L1026))


そのため、Adminのフォームクラスに、Meta を定義して、 widgets に TextInput 等を適当に指定すれば、 へんな `str(dict)` の表示ではなくウィジェットの表示になる。

```python
class MyInlineAdminForm(forms.ModelForm):

    class Meta:
        # Django5 から追加。無いと、str(dict)の値が表示されて変になる。
        # TextInput としているが、ReadOnly なのでIDはただの文字列になる。
        widgets = {
            'id': forms.TextInput(),
        }

    ...
```
