ModelAdmin.formfield_overrides、ModelAdmin.formfield_for_dbfield、またはカスタム ModelForm のいずれかで、HTML フォーム入力を表示するのではなく、フィールドの値を表示するだけの name_slug フィールドにカスタム ウィジェットを割り当てる必要があります。そのようなウィジェットはここにあります。
編集: カスタム ウィジェットの作成の詳細については説明しません。上記でリンクしたものをそのまま使用できます。モデル内のすべての SlugField に対してこのウィジェットを有効にするには、formfield_overridesを使用するのが最も簡単な方法です。
class PageAdmin(admin.ModelAdmin):
formfield_overrides = {
models.SlugField: {'widget': ReadOnlyWidget},
}
モデルに複数の SlugField があり、そのうちの 1 つにのみ ReadOnlyWidget を適用したい場合は、 formfield_for_dbfield メソッドをオーバーライドします。
class PageAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'name_slug':
kwargs['widget'] = ReadOnlyWidget
return super(PageAdmin, self).formfield_for_dbfield(db_field, **kwargs)
モデル用に完全にカスタマイズされた ModelForm を作成し、それを ModelAdmin の form 属性に割り当てることもできますが、より深いカスタマイズを行う場合を除き、これは必要ありません。