7

Al igual que mucha documentación sobre vistas genéricas en Django, no puedo encontrar documentos que describan explícitamente cómo usar las nuevas vistas genéricas basadas en clases con Django Forms.Django Class-Based Generic Views y ModelForms

¿Cómo se hace?

Respuesta

4

¿Qué has intentado hasta ahora? Las vistas basadas en clases son bastante nuevas, y los documentos no tienen muchos ejemplos, ¡así que creo que vas a tener que ensuciarte las manos y experimentar!

Si desea actualizar un objeto existente, intente con UpdateView. Mire las mezclas que utiliza (por ejemplo, ModelFormMixin, SingleObjectMixin, FormMixin) para ver qué métodos puede/debe anular.

¡Buena suerte!

+0

UpdateView parece ser lo que necesito. Si entiendo los documentos escribes correctamente el punto, ni siquiera necesito escribir una subclase separada para mi (s) formulario (s). Mi problema es que soy bastante nuevo para Django, así que algunos ejemplos reales de trabajo realmente me ayudarían. gracias por los enlaces. – pwalsh

2

La forma más fácil de usar formularios modelo con vistas basadas en clases es pasar el modelo y mantener un slug/pk capturado en url, en cuyo caso no necesitará escribir ningún código de vista.

url(r'^myurl/$', CreateView.as_view(model=mymodel)) 
#Creates a model form for model mymodel 

url(r'^myurl/(?<pk>\w+)/$', UpdateView.as_view(model=mymodel)) 
#Creates a model form for model mymodel and updates the object having pk as specified in url 

url(r'^myurl/(?<slug>\w+)/$', DeleteView.as_view(model=mymodel, slug_field="myfield")) 
#Creates a model form for model mymodel and deletes the object denoted by mymodel.objects.get(my_field=slug) 

También puede anular los métodos para obtener una lógica más compleja. También puede pasar un conjunto de consulta en lugar de un objeto modelo.

Otra forma es crear un ModelForm en forms.py y luego pasar a la url form_class como

url(r'^myurl/$', CreateView.as_view(form_class=myform)) 

Este método le permite definir funciones de formulario, así como los atributos Meta para el formulario.

+0

¿Cómo se usaría una versión genérica de create para agregar una "entrada" a la clase "categoría"? Categoría de clase (modelos.Modelo): title = modelos.CharField) slug = modelos.CharField() entrada = modelos.ManyToManyField (entrada) – Bryce

+0

url (r '^ myurl/$', CreateView.as_view (model = Category, template_name = "template.html")) –