2017-07-28 85 views
0

我有一个包含几个字段(包括“ID”字段)模型的StackedInline缺少ID只读字段:Django管理,在StackedInline

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优良工程

为何标识缺失以及如何将其添加为只读字段发生了什么?

+0

不是一个对象ID总是只读? – marcusshep

+0

您使用的是哪个版本的Django?使用Django 1.11我不能把'id'成'fields'不也把它在'readonly_fields',因为它触发了'FieldError ID不能为*模型形式指定,因为它是一个不可编辑field',如果我把它,它工作正常。 –

+0

这是一个自定义字符集,它被设置为主键,并且在管理中显示为可编辑字段。 我运行Django的1.11和问题是完全相反的,本场隐藏,如果我尝试将其设置为只读 – angrykoala

回答

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