ListView – Vistas basadas en clases Django

Vista de lista se refiere a una vista (lógica) para mostrar varias instancias de una tabla en la base de datos. Ya hemos discutido los conceptos básicos de Vista de lista en Vista de lista – Vistas basadas en funciones Django . Las vistas basadas en clases proporcionan una forma alternativa de implementar vistas como objetos de Python en lugar de funciones. No reemplazan las vistas basadas en funciones, pero tienen ciertas diferencias y ventajas en comparación con las vistas basadas en funciones: 

  • La organización del código relacionado con métodos HTTP específicos (GET, POST, etc.) se puede abordar mediante métodos separados en lugar de bifurcaciones condicionales.
  • Las técnicas orientadas a objetos, como mixins (herencia múltiple), se pueden usar para factorizar el código en componentes reutilizables.

Las vistas basadas en clases son más simples y eficientes de administrar que las vistas basadas en funciones. Una vista basada en funciones con toneladas de líneas de código se puede convertir en una vista basada en clases con solo unas pocas líneas. Aquí es donde entra en juego la Programación Orientada a Objetos. 

Vista de lista de Django: vistas basadas en funciones

Ilustración de cómo crear y usar la vista de lista usando un ejemplo. Considere un proyecto llamado geeksforgeeks que tenga una aplicación llamada geeks. 

Consulte los siguientes artículos para comprobar cómo crear un proyecto y una aplicación en Django. 

Después de tener un proyecto y una aplicación, creemos un modelo del cual crearemos instancias a través de nuestra vista. En geeks/models.py, 

Python3

# import the standard Django Model
# from built-in library
from django.db import models
  
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
 
    # fields of the model
    title = models.CharField(max_length = 200)
    description = models.TextField()
 
    # renames the instances of the model
    # with their title name
    def __str__(self):
        return self.title

Después de crear este modelo, necesitamos ejecutar dos comandos para crear la base de datos para el mismo. 

Python manage.py makemigrations
Python manage.py migrate

Ahora vamos a crear algunas instancias de este modelo usando shell, ejecute form bash, 

Python manage.py shell

Ingrese los siguientes comandos  

>>> from geeks.models import GeeksModel
>>> GeeksModel.objects.create(
                       title="title1",
                       description="description1").save()
>>> GeeksModel.objects.create(
                       title="title2",
                       description="description2").save()
>>> GeeksModel.objects.create(
                       title="title2",
                       description="description2").save()

Ahora tenemos todo listo para el back-end. Verifique que las instancias se hayan creado desde http://localhost:8000/admin/geeks/geeksmodel/ 

django-listview-check-models-instances

Las vistas basadas en clases configuran automáticamente todo, desde la A hasta la Z. Solo se necesita especificar para qué modelo crear ListView, luego ListView basado en clases intentará encontrar una plantilla automáticamente en app_name/modelname_list.html. En nuestro caso es geeks/templates/geeks/geeksmodel_list.html. Vamos a crear nuestra vista basada en clases. En geeks/views.py, 

Python3

from django.views.generic.list import ListView
from .models import GeeksModel
 
class GeeksList(ListView):
 
    # specify the model for list view
    model = GeeksModel

Ahora cree una ruta de URL para mapear la vista. En geeks/urls.py, 

Python3

from django.urls import path
 
# importing views from views..py
from .views import GeeksList
urlpatterns = [
    path('', GeeksList.as_view()),
]

Cree una plantilla en templates/geeks/geeksmodel_list.html, 

HTML

<ul>
    <!-- Iterate over object_list -->
    {% for object in object_list %}
    <!-- Display Objects -->
    <li>{{ object.title }}</li>
    <li>{{ object.description }}</li>
   
    <hr/>
    <!-- If object_list is empty  -->
    {% empty %}
    <li>No objects yet.</li>
    {% endfor %}
</ul>

Veamos qué hay en http://localhost:8000/ 

django-listview-class-based-views

Manipular Queryset en ListView

Por defecto, ListView mostrará todas las instancias de una tabla en el orden en que fueron creadas. Si se desea modificar la secuencia de estas instancias o el orden, se debe anular el método get_queryset. 
En geeks/views.py, 

Python3

from django.views.generic.list import ListView
from .models import GeeksModel
   
class GeeksList(ListView):
   
    # specify the model for list view
    model = GeeksModel
   
    def get_queryset(self, *args, **kwargs):
        qs = super(GeeksList, self).get_queryset(*args, **kwargs)
        qs = qs.order_by("-id")
        return qs

Ahora compruebe si el orden de las instancias se ha invertido. 

django-reverse-list-view-class

De esta manera, se puede modificar todo el conjunto de consultas de cualquier manera posible.
 

Publicación traducida automáticamente

Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *