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

Django
2025-03-13 18:25 (3日前) ytyng
View in English

画像

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(),
        }

    ...
現在未評価
タイトルとURLをコピー
著者は、アプリケーション開発会社 Cyberneura を運営しています。
開発相談をお待ちしています。

コメント

アーカイブ

2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011