2017-07-28 1 views
0

Ich habe ein StackedInline mit einem Modell, das mehrere Felder enthält (einschließlich einer ‚id‘ Feld):Django Admin, fehlende ID Nur-Lese-Feld in StackedInline

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

Dies zeigt die drei editierbaren Felder wie erwartet jedoch, bei der Einstellung diejenigen readonly:

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

das id-Feld fehlt, nur die foo und bar erscheinen (als nicht editierbar).

Dieses Verhalten geschah, als StackedInline Verwendung mit TabularInline funktioniert gut

Warum ist Id fehlt und wie kann ich es als ein Nur-Lese-Feld hinzufügen?

+0

Ist eine Objekt-ID nicht immer readonly? – marcusshep

+0

Welche Version von Django verwendest du? Mit Django 1.11 kann ich 'id' nicht in' fields' setzen, ohne es auch in 'readonly_fields' zu setzen, weil es eine' FieldError'-ID auslöst, die nicht für ein * -Modellformular angegeben werden kann, da es ein nicht editierbares Feld ist. es funktioniert gut. –

+0

Es ist ein benutzerdefiniertes charField-Set als Primärschlüssel, das im Admin als bearbeitbares Feld angezeigt wird. Ich habe django 1.11 und das Problem ist genau das Gegenteil, das Feld versteckt, wenn ich versuche, es nur zu lesen – angrykoala

Antwort

1

Überprüfen Sie zuerst, ob das MyModel Modell einen Fremdschlüssel für das Modell hat, in dem es als inlines = [MyModel] deklariert wird.

So etwas:

# 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] 

Mit diesem Satz, mit Django 1.11 und einige Dummy-Werte für die id Primärschlüssel, sollten Sie dies erhalten (lokal getestet und funktioniert wie ein Charme):

inline admin example