2012-07-03 27 views
5

Estoy usando modelformset factory para generar formset a partir de los campos del modelo. Aquí quiero hacer solo los objetos queryset como readonly y otros (formularios extra) como campos no de lecturaCampos de solo lectura en django formset

¿Cómo puedo lograr esto?

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

En juego de formularios Por encima de lo que quería para mostrar todos los objetos QuerySet como de sólo lectura, y el restante formas adicionales como campos no sólo lectura. ¿Cómo puedo lograr esto?

si i utilizada,

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

Esto convertirá todas las formas (incluyendo extra) a campos de sólo lectura, que yo no quiero. Y también estoy usando el plugin jquery para agregar forma dinámicamente al formset

Respuesta

7

me gustaría recomendar la especificación de una forma de usar para el modelo, y en esa forma se puede establecer lo que sea atributos desee solo lectura.

#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

Mi pregunta es cómo puedo hacer que solo los formularios de consulta sean solo formularios no extra. Su solución convertirá todos los campos de formulario como de solo lectura incluyendo también campos adicionales. Aquí, ¿cómo puedo hacer que los campos de formulario adicionales no sean de solo lectura y que los demás sean de solo lectura? – Asif

+0

eche un vistazo a la instrucción if en mi respuesta editada. No estoy seguro de si es la manera más limpia de verificar si el formulario tiene una instancia asociada, pero está funcionando en mis pruebas. –

+0

Muchas gracias que resuelve mi problema – Asif

1

Utilicé python hace mucho tiempo. Hope this helps. Pero si desea controlar campos de visualización usando jQuery

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

o

$('#id').attr('readonly', true); 
Cuestiones relacionadas