2015-02-02 8 views
6

Desidero disabilitare i pochi campi dal modello in admin di django, salvando inizialmente.rendere il campo modello django di sola lettura o disabilitarlo in admin mentre si salva l'oggetto per la prima volta

"<input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">" 

come questo.

Il mio modello è:

class Blogmodel(models.Model): 
    tag = models.ForeignKey(Tag) 
    headline = models.CharField(max_length=255) 
    image=models.ImageField(upload_to=get_photo_storage_path, null=True, blank=False) 
    body_text = models.TextField() 
    pub_date = models.DateField() 
    authors = models.ForeignKey(Author) 
    n_comments = models.IntegerField() 

Voglio disattivare il "titolo" e "n_comments". l'ho provato nel file admin.py, ma non disabilita i campi sul salvataggio iniziale. Ma per la modifica dei campi funziona, rendendo i campi di sola lettura.

in admin.py

class ItemAdmin(admin.ModelAdmin): 
    exclude=("headline ",) 
    def get_readonly_fields(self, request, obj=None): 
     if obj: 
      return ['headline '] 
     else: 
      return [] 

headling ottenendo disabili, ma solo per modifica. Voglio disabilitarlo al momento della creazione dell'oggetto. vale a dire prima salva. qualcuno può guidarmi per questo?

+0

Perché non utilizzi invece la proprietà readonly_fields? – GwynBleidD

+0

funzionerà per la modifica degli oggetti non per la creazione dell'oggetto per la prima volta. – Gaurav

+0

Funzionerà per entrambi se non si sovrascrive 'get_readonly_fields'. – GwynBleidD

risposta

4

Se si vuole rendere il campo di sola lettura durante la creazione si dovrebbe fare il contrario:

def get_readonly_fields(self, request, obj=None): 
    if obj is None: 
     return ['headline '] 
    return [] 
+0

ha funzionato grazie mille. Ma non mostra la casella di input disabilitata. – Gaurav

+0

fieno non funziona per la modifica !!. Durante la modifica non è disabilitato. – Gaurav

+0

Scusa ho frainteso la domanda, pensavo volessi disabilitarla per creare ... altrimenti solo sempre 'return ['headline']' ... Non c'è bisogno della clausola If ... –

1

Per rendendolo disabile, mentre il risparmio oggetto iniziale e per la modifica anche noi possiamo fare questo

class ItemAdmin(admin.ModelAdmin): 
    def get_readonly_fields(self, request, obj=None): 
     if obj is None: 
      return ['headline'] 
     else: 
      return ['headline'] 
     return [] 

ha funzionato per me.

26

Non è necessario eseguire l'override di get_readonly_fields. soluzione più semplice sarebbe:

class ItemAdmin(admin.ModelAdmin): 
    exclude=("headline ",) 
    readonly_fields=('headline',) 

Quando si utilizza readonly_fields non è possibile ignorare get_readonly_fields, perché implementazione predefinita legge variabile readonly_fields. Quindi, ignorandolo solo se devi avere una logica per decidere quale campo deve essere letto solo alla volta.

+0

Non ho idea del perché la gente non stiamo usando il tuo semplice suggerimento qui –

+0

Questa è la strada da percorrere! – LiberiFatali

Problemi correlati