python - example - Modificar queryset predeterminado en django
django taggit example (2)
Puede escribir un administrador de consultas personalizado, pero no creo que este sea el camino correcto. Esto crearía una condición implícita y oculta para un filtro, lo que haría que el código sea ilegible. Recuerde Zen of Python: Explicit is better than implicit
. Detecta lugares, donde debes agregar cancelled = False y simplemente agrega esto, esa es la forma en que debes hacer esto.
He agregado un campo ''cancelado'' a mi modelo, ¿hay alguna manera de modificar la consulta predeterminada del modelo a algo como cancelado = falso? sin tener que modificar todas mis consultas de filtro / exclusión?
Puede hacer esto con un administrador de modelo personalizado y anular la función get_queryset
para filtrar siempre cancelled = False.
class CustomManager(models.Manager):
def get_queryset(self):
return super(CustomManager, self).get_queryset().filter(canceled=False)
class MyModel(models.Model):
# Blah blah
objects = CustomManager()
Luego, al llamar a MyModel.objects.all()
, siempre excluirá los objetos cancelados. Aquí hay una publicación de blog que encontré útil sobre el tema. http://www.b-list.org/weblog/2006/aug/18/django-tips-using-properties-models-and-managers/
EDITAR: Quizás un mejor enfoque con un administrador personalizado sería adjuntarlo a otra propiedad, que no sean objetos, tales como:
class MyModel(models.Model):
# Blah blah
active = CustomManager()
Y en sus vistas sus consultas se verían como MyModel.active.all()
.
EDIT2: Método actualizado de ortografía de get_query_set
a get_queryset
para versiones modernas de django.