Imos progresando con Django. Onte descubrín as
generic_views
, e de cómo levo facendo o "mono" creando funcións en views.py
para cargar os modelos da base de datos. generic_views
veñen na instalación de Django en django.views.generic
, así que abrimos unha consola python/djangopython manage.py shell >>>import django.views.generic >>>help(django.views.generic)
Obtendo a documentación da nosa instalación. Na miña sae:
PACKAGE CONTENTS create_update date_based list_detail simple
E así sabemos qué librerías de
generic_views
temos dispoñibles. Podemos importar estas librerías para saber cómo funcionan, e pedir axuda igual que antes:python manage.py shell >>>import django.views.generic.create_update >>>help(django.views.generic.create_update)
Para o exemplo utilizaremos
create_object
, función que engade unha entrada na base de datos baseándose no modelo.Modelo
/elements/models.py
from django.db import models
class Content(models.Model):
family_choices = (
("A", "A family"),
("B", "B family"),
("C", "C family"),
)
name = models.CharField(max_length=50)
family = models.CharField(max_length=8, choices=family_choices)
subfamily = models.CharField(max_length=50)
content = models.CharField(max_length=32767)
add_date = models.DateTimeField()
def __unicode__(self):
return self.name
Template
O template, según vimos na axuda
help(django.views.generic.create_update)
debe estar ubicado de forma que o Django o atope. A documentación decía Templates: "app_label/model_name_form.html"
, que no noso caso sería elements/content_form.html
.
<form method="post" action=".">
{{ form.as_p }}
<input type="submit" />
</form>
Como é normal, podemos envolver este formulario en calquer {% block %} que entre ben no noso deseño.
Urls
Nas urls.py está a clave da cuestión. No urls.py base poñeremos:
(r'^elements/', include('noso_app.elements.urls'))
E en
elements/urls.py
poñeremos:
from noso_app.elements.models import Content
...
(r'^add/$', 'django.views.generic.create_update.create_object', dict(model=Contents, post_save_redirect="/elements/"))
O parámetro "post_save_redirect" será a url á que iremos despóis de facer o gardado na base de datos.
Resultado
Agora cando entremos no noso dominio.com/elements/add, sairanos un formulario que automáticamente gardará as entradas na base de datos. Parece complicado, pero si nos fixamos estamos evitando calquer interacción directa coa base de datos, nin temos que escribir ningún
views.py
para manexar a entrada de datos. Si navegamos na documentación de generic_views
atoparemos atallos para listar, borrar, actualizar... sin picar case nada de código.
No hay comentarios:
Publicar un comentario