55

我正在使用 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')

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

4

4 回答 4

74

经过一段时间试图找到这个名字后,我找到了这个答案,所以我检查了名字,self.opts.local_fields找到了中间表的名字并将其添加到readonly_fields,设置can_delete为 False。

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

非常简单,但花了我一段时间,所以我发现在这里添加它是个好主意。

于 2013-06-14T22:43:00.890 回答
45

此外,如果您不想添加/删除行,您可以添加这些定义。

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

def has_delete_permission(self, request, obj=None):
    return False
于 2015-06-08T08:41:53.647 回答
23

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

class UnitsInline(admin.TabularInline):

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

这将阻止任何人从管理员编辑条目。

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

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))
于 2019-01-09T16:39:05.560 回答
4

谢谢凯瓦尔帕布

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
于 2017-09-28T09:56:30.940 回答