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

Grappeli を使っている場合のみに発生するかもしれない。
Django5 あたりから、 django.contrib.admin.helpers.AdminReadonlyField のインスタンス変数 field に is_hidden というキーが追加された。
このキーは、AdminForm のウィジェットが HiddenInput などの場合に True になる。(コード)
そして、Form の _meta.widgets['フィールド名'] が存在しない場合、ウィジェットは HiddenInput になる(コード)
そのため、Adminのフォームクラスに、Meta を定義して、 widgets に TextInput 等を適当に指定すれば、 へんな str(dict) の表示ではなくウィジェットの表示になる。
class MyInlineAdminForm(forms.ModelForm):
class Meta:
# Django5 から追加。無いと、str(dict)の値が表示されて変になる。
# TextInput としているが、ReadOnly なのでIDはただの文字列になる。
widgets = {
'id': forms.TextInput(),
}
...
評価をお願いします
まだ評価がありません
著者は、アプリケーション開発会社 Cyberneura を運営しています。
開発相談をお待ちしています。
開発相談をお待ちしています。