admin ページで特定の項目だけreadonly にする

django のadminページはデフォルトで全て変更可能です。

たとえば、次のようなadmin.py があったとして、author, title, text は全部変更可能になります。

class SampleAdmin(admin.ModelAdmin):
    fieldsets = [
        ('Author',  {'fields': ['author']}),
        ('Title',   {'fields': ['title']}),
        ('Text',   {'fields': ['text']}),
    ]
    list_display = ('author', 'title', 'text', 'updated_at')

admin.site.register(Sample, SampleAdmin)

ここで、author, titleは変更しないよねってことでreadonly にしたい場合は、次の一行を追加します。

class SampleAdmin(admin.ModelAdmin):
    fieldsets = [
        ('Author',  {'fields': ['author']}),
        ('Title',   {'fields': ['title']}),
        ('Text',   {'fields': ['text']}),
    ]
    list_display = ('author', 'title', 'text', 'updated_at')
    readonly_fields = ('author', ' title')    # この行を追加

admin.site.register(Sample, SampleAdmin)


おしまい。

ホントはModelForm でreadonly にしたいんだけど、そっちはやり方わからず。。
調べよう。