私はDjango 1.4を使用しており、many2manyフィールドがあるので、管理サイトを作成するときにこのフィールドをインラインとして追加したかった。
class SummaryInline(admin.TabularInline):
model = ParserError.summaries.through
class MyClassAdmin(admin.ModelAdmin):
list_display = ('classifier', 'name', 'err_count', 'supported')
fields = ('classifier', 'name', 'err_count', 'err_classifier', 'supported')
inlines = (SummaryInline,)
readonly_fields = ('classifier', 'err_count')
だから私の質問は、インラインフィールドを読み取り専用にする方法はありますか?
名前を見つけようとしばらくしてから この回答 のおかげでわかったので、self.opts.local_fields
と中央のテーブルの名前を見つけて readonly_fields
、設定 can_delete
をFalseに。
class SummaryInline(admin.TabularInline):
model = ParserError.summaries.through
readonly_fields = ('myclasssummary',)
can_delete = False
とてもシンプルですが、しばらく時間がかかりましたので、ここに追加するのは良いアイデアだと思いました。
また、行を追加/削除する機能が必要ない場合は、これらの定義を追加できます。
def has_add_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
以下を追加することにより、行全体を読み取り専用にできます。
class UnitsInline(admin.TabularInline):
def has_change_permission(self, request, obj=None):
return False
これにより、誰でも管理者からのエントリを編集できなくなります
ありがとうケバル・プラブー
class UnitsInline(admin.TabularInline):
model = Units
extra = 0
verbose_name = 'Units'
verbose_name_plural = 'Units of company'
**def has_add_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False**