Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/03/2014, 19:19
Avatar de stormearth
stormearth
 
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 10 años, 6 meses
Puntos: 2
Tratando de entender algunos "overrides" de métodos en Django

Hola todos, estoy leyendo un libro sobre django que se llama Two Scoops of Django. Me parece un poco avanzado y no termino de comprender el uso de "super" para reemplazar métodos en clases. Supongamos este ejemplo que da el libro:
Código:
from django.views.generic import ListView
from .models import Flavor

class FlavorListView(ListView):
      model = Flavor
      
      def get_queryset(self):
            queryset = super(FlavorListView, self).get_queryset()
            
            q = self.request.GET.get("q")
            if q:
                 return queryset.filter(title__icontains=q)
Entonces, el modelo Flavor ya lo había creado antes el autor, q es el queryset que pasa del form a la view y bueno ListView es una de las views genéricas de Django.
Lo que no entiendo es más de Python:
como es que el método get_queryset se llama a sí mismo en la primera línea:
Código:
queryset = super(FlavorListView, self).get_queryset()
¿Cómo funciona eso? si el método get_queryset debe llamar en seguida a si mismo para establecer la variable queryset, ¿en qué momento se resuelve el método get_queryset?.

Lo que está haciendo aquí el autor es mostrando como se puede "override" el método get_queryset de la vista genérica ListView. Pero no logro comprender la lógica.

Si ustedes comprenden, les agradecería si me pueden explicar.

Última edición por stormearth; 26/03/2014 a las 19:22 Razón: ortografía