2012-07-03 21 views
5

Sto utilizzando modelformset factory per generare il formset dai campi del modello. Qui voglio rendere solo gli oggetti queryset come readonly e altri (moduli aggiuntivi) come campi non di sola letturaCampi di sola lettura nel formato django

Come posso ottenere questo?

AuthotFormSet = modelformset_factory(Author, extra=2,) 
    formset = AuthorFormSet(queryset=Author.objects.all()) 

In formset Sopra ho voluto per visualizzare tutti gli oggetti QuerySet in sola lettura, e altre forme extra come campi non di sola lettura. Come posso raggiungerlo?

se ho usato,

 for form in formset.forms: 
      form.fields['weight'].widget.attrs['readonly'] = True 

Questo convertirà tutte le forme (compresi extra) campi di sola lettura che non voglio. E anche io sto usando il plugin jQuery per aggiungere form dinamicamente al formset

risposta

7

mi consiglia di specificare un modulo da utilizzare per il modello, e in questo modulo è possibile impostare qualunque cosa gli attributi che si desidera sola lettura.

#forms.py 
class AuthorForm(forms.ModelForm): 
    class Meta: 
     model = Author 

    def __init__(self, *args, **kwargs): 
     super(AuthorForm, self).__init__(*args, **kwargs) 
     if self.instance.id: 
      self.fields['weight'].widget.attrs['readonly'] = True 

#views.py 
AuthorFormSet = modelformset_factory(Author, extra=2, form=AuthorForm) 
+0

La mia domanda è come posso creare solo moduli di queryset in forma non di sola lettura. La tua soluzione convertirà tutti i campi del modulo come readonly, inclusi anche i campi aggiuntivi. Ecco come posso creare campi di moduli aggiuntivi come non di sola lettura e altri dovrebbero essere di sola lettura – Asif

+0

controlla la dichiarazione if nella mia risposta modificata. Non sono sicuro che sia il modo più pulito per verificare se al modulo è associata un'istanza, ma sta funzionando nei miei test. –

+0

Grazie mille che risolve il mio problema – Asif

1

Ho usato il dorso lungo di pitone. Spero this helps. Ma se si desidera controllare campi di visualizzazione utilizzando jQuery

$('.class').attr('readonly', true); 

o

$('#id').attr('readonly', true); 
Problemi correlati