Django Admin,在StackedInline中缺少id readonly字段

时间:2017-07-28 12:46:13

标签: python django django-admin

我有一个StackedInline,其模型包含多个字段(包括' id'字段):

class MyInline(admin.StackedInline):
   model= myModel
   fields = ('id', 'foo', 'bar')

这会按预期显示3个可编辑字段,但是,将其设置为readonly

class MyInline(admin.StackedInline):
   model= myModel
   fields = ('id', 'foo', 'bar')
   readonly_fields= ('id','foo','bar')

缺少ID字段,只显示foobar(不可编辑)。

使用StackedInline时会发生此行为,TabularInline正常

为什么ID丢失了,如何将其添加为只读字段?

1 个答案:

答案 0 :(得分:1)

首先检查MyModel模型是否具有模型的外键,该模型将在其中声明为inlines = [MyModel]

类似的东西:

# models.py

class Album(models.Model):
    # various fields here

class AutoId(models.Model):
    id = models.CharField(primary_key=True, max_length=10)
    album = models.ForeignKey(Album, blank=True, null=True)
    foo = models.CharField(max_length=12)


# admin.py

class AutoIdInline(admin.StackedInline):
    model = AutoId
    fields = ('id', 'foo', )
    readonly_fields = ('id', 'foo', )

@admin.register(Album)
class AlbumAdmin(admin.ModelAdmin):
    inlines = [AutoIdInline]

使用该设置,使用Django 1.11和id主键的一些虚拟值,你应该得到这个(在本地测试并且像魅力一样工作):

inline admin example