如何在django admin上添加readonly内联

Has*_*sek 35 python 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')
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何才能使内联字段只读?

Has*_*sek 55

经过一段时间试图找到我想出的名字,感谢这个答案,所以我检查了名字,self.opts.local_fields找到了中间名的名称并添加到了readonly_fields,设置can_delete为False.

class SummaryInline(admin.TabularInline):
    model = ParserError.summaries.through
    readonly_fields = ('myclasssummary',)
    can_delete = False
Run Code Online (Sandbox Code Playgroud)

很简单,但我花了一些时间,所以我发现在这里添加它是一个好主意.

  • `readonly_fields` 中的 `myclasssummary` 是什么?它是来自`summaries` 模型的表名还是字段名? (2认同)

Kev*_*bhu 32

此外,如果您不希望能够添加/删除行,则可以添加这些定义.

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

def has_delete_permission(self, request, obj=None):
    return False
Run Code Online (Sandbox Code Playgroud)


tam*_*yte 19

您可以通过添加以下内容使整个内联只读:

class UnitsInline(admin.TabularInline):

    def has_change_permission(self, request, obj=None):
        return False
Run Code Online (Sandbox Code Playgroud)

这将阻止任何人编辑来自管理员的条目。

另一个防止、添加、删除和将所有内联字段显示为只读的示例:

class ReadOnlyInline(admin.TabularInline):
    def has_change_permission(self, request, obj=None):
        return False

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

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

    def get_readonly_fields(self, request, obj=None):
        return list(super().get_fields(request, obj))
Run Code Online (Sandbox Code Playgroud)


小智 5

谢谢凯瓦尔·帕布

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
Run Code Online (Sandbox Code Playgroud)