web-dev-qa-db-ja.com

Django adminにインラインで読み取り専用を追加する方法

私は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')

だから私の質問は、インラインフィールドを読み取り専用にする方法はありますか?

35
Hassek

名前を見つけようとしばらくしてから この回答 のおかげでわかったので、self.opts.local_fieldsと中央のテーブルの名前を見つけて readonly_fields 、設定 can_delete をFalseに。

class SummaryInline(admin.TabularInline):
    model = ParserError.summaries.through
    readonly_fields = ('myclasssummary',)
    can_delete = False

とてもシンプルですが、しばらく時間がかかりましたので、ここに追加するのは良いアイデアだと思いました。

54
Hassek

また、行を追加/削除する機能が必要ない場合は、これらの定義を追加できます。

def has_add_permission(self, request, obj=None):
    return False

def has_delete_permission(self, request, obj=None):
    return False
30
Keval Prabhu

以下を追加することにより、行全体を読み取り専用にできます。

class UnitsInline(admin.TabularInline):

    def has_change_permission(self, request, obj=None):
        return False

これにより、誰でも管理者からのエントリを編集できなくなります

2
tamarabyte

ありがとうケバル・プラブー

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**
2
Muhammad Hafid