Saltar al contenido

Django ORM – objects.filter () vs objects.all (). Filter () – ¿cuál es el preferido?

Solución:

El método all() en un gerente solo delega a get_queryset(), como puede ver en el código fuente de Django:

def all(self):
    return self.get_queryset()

Así que es solo una forma de obtener el QuerySet del Administrador. Esto puede ser útil para asegurarse de que está tratando con un QuerySet y no con un administrador, porque MyModel.objects devuelve un Gerente.

Por ejemplo, si desea iterar sobre todos los elementos, hipocresía hacer esto:

for item in MyModel.objects:
    # do something with item

Porque no puedes iterar sobre un Manager. Sin embargo, all() devuelve el QuerySet, usted pueden iterar sobre un QuerySet:

for item in MyModel.objects.all():
    # do something with item

Generalmente, nunca debe sobrescribir all(). Puedes sobrescribir get_queryset() pero este método debe devolver un QuerySet.

Si usara un método de filtro como filter() o exclude(), ya tendría el QuerySet, porque estos métodos se transfieren al QuerySet. Entonces no tienes que hacer algo como all().filter().

  1. MyModel.objects devuelve la instancia del administrador. all() regreso get_query_set(). Creo que todo está ahí para cuando necesites todos los objetos.
  2. yo prefiero MyModel.objects.filter() porque el otro es solo una llamada de método más, y no necesito todos los objetos si filtro 🙂
  3. Depende del propósito. Pero si anulan un método base del administrador, devuelven el mismo formato de resultado (por ejemplo, un QuerySet)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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