2010-06-15 20 views
10

Tengo un formulario de modelo que utilizo para actualizar un modelo.¿Cómo puedo actualizar solo ciertos campos en un formulario modelo de Django?

class Turtle(models.Model): 
    name = models.CharField(max_length=50, blank=False) 
    description = models.TextField(blank=True) 

class TurtleForm(forms.ModelForm): 
    class Meta: 
     model = Turtle 

A veces no es necesario actualizar todo el modelo, pero solo quiero actualizar uno de los campos. Entonces, cuando PUBLICO el formulario solo tiene información para la descripción. Cuando hago eso, el modelo nunca guarda porque cree que el nombre está siendo borrado mientras que mi intención es que el nombre no cambie y solo se use desde el modelo.

turtle_form = TurtleForm(request.POST, instance=object) 
    if turtle_form.is_valid(): 
     turtle_form.save() 

¿Hay alguna manera de que esto suceda? ¡Gracias!

Respuesta

9

campos Sólo uso especificados:

class FirstModelForm(forms.ModelForm): 
    class Meta: 
     model = TheModel 
     fields = ('title',) 
    def clean_title(self.... 

Ver http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#controlling-which-fields-are-used-with-fields-and-exclude

Es común usar diferentes ModelForms para un modelo en diferentes vistas, cuando necesita diferentes características. Por lo tanto la creación de otra forma para el modelo que utiliza el mismo comportamiento (por ejemplo clean_<fieldname> métodos etc.) usan:

class SecondModelForm(FirstModelForm): 
    class Meta: 
     model = TheModel 
     fields = ('title', 'description') 
+0

Gracias. Lo bueno de este método es que solo necesito enviar el formulario completo para rellenar la plantilla y luego puedo elegir diferentes formularios según lo que haya publicado. –

1

Si no desea actualizar un campo, eliminarlo de la forma a través de la Meta exclude tupla:

class Meta: 
    exclude = ('title',) 
+0

Esto no es exactamente lo que yo quiero hacer. Tengo un solo TurtleForm y en un lugar de la página quiero tener la descripción y en otro lugar quiero tener el formulario completo. ¿Es esto posible o necesito dividirlo en dos formas diferentes? –

Cuestiones relacionadas