2017-07-28 189 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