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()
.
-
MyModel.objects
devuelve la instancia del administrador.all()
regresoget_query_set()
. Creo que todo está ahí para cuando necesites todos los objetos. - 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 🙂 - Depende del propósito. Pero si anulan un método base del administrador, devuelven el mismo formato de resultado (por ejemplo, un QuerySet)