2013-03-13 16 views
13

Ho alcuni modelli con un numero elevato di inline. Dal momento che non tutti sono necessari per ogni oggetto, ho dichiarato il modello in linea con extra = 0 in modo che un piccolo add + apparisse sulla linea.django 1.5 admin inline extra

Tuttavia, questo sembra non funzionare più in django 1.5. Se è impostato extra = 0, l'in linea non è più modificabile.

C'è un modo per ottenere il comportamento 1.4 in 1.5?

Esempio di codice:

class ModelInline(admin.StackedInline): 
    model = MyModel 
    extra = 0 

class OtherModelAdmin(admin.ModelAdmin) 
    inlines = [ModelInline] 

admin.site.register(OtherModel, OtherModelAdmin) 

Edit (alcuni schermi):

Django 1.4: django 1.4 extra=0

Django 1.5: enter image description here

(Hinzufügen == aggiungere)

+0

codice di esempio sarebbe bello vedere qui. –

+0

k, aggiunto qualche esempio di codice – Jannis

risposta

7

Questo è già accaduto prima.

The new javascript made this impossible because the "Add Another" button 
was controlled by max_num, and ignored a value of 0. 
The javascript ignored a value of 0 because max_num has a default value of 0, 
and all the code using it had taken to equating max_num = 0 with being "off". 
So you can't actually have a maximum of 0. It's not possible. 

C'è una patch creata da Gabrial Hurley per ripristinare il comportamento desiderato senza rompere nient'altro. Questo è 3 anni fa e non so se funziona ancora per Django 1.5. Basta provare :)

https://code.djangoproject.com/attachment/ticket/13023/13023_inlines_patch.diff

Ecco il biglietto per lo stesso bug (3 anni fa):

https://code.djangoproject.com/ticket/13023

+0

Non riesco a applicare questo in 1.6 perché total_form_count non è più definito in models.py, solo in formsets.py, e il codice è diverso, quindi non sono sicuro di cosa cambiare . Qualcuno può aiutare? – smwilsonau

+0

@smwilsonau In Django 1.6, si chiama 'initial_form_count' – catherine

+0

grazie, ho trovato le linee equivalenti e ho applicato la patch, ma il mio problema si è rivelato essere qualcosa di diverso ... – smwilsonau

2

Ho incontrato lo stesso problema perché ho avuto il contenuto di amministrazione statica una directory che era al di fuori dell'installazione di django. La copia del contenuto statico di Django 1.5 da django/contrib/admin/static/admin/js/a STATIC_ROOT/admin/js ha risolto il problema.

+1

In realtà non è una buona cosa da fare. Quando aggiornerai la versione di django a un certo punto, ti troverai nei guai perché non vedrai la nuova versione di quei file statici (solo un problema simile). Se si server il contenuto statico nel modo corretto (https://docs.djangoproject.com/en/dev/howto/static-files/) non dovresti avere problemi – nivcaner

0

la soluzione migliore sarebbe quella di sovrascrivere il metodo get_extra dello stesso inline. Questo funziona in Django 1.9, anche se non posso dire per le versioni precedenti