filtros Django personalizado Queryset
-
21-08-2019 - |
Pergunta
Existe, no Django, um modo padrão para escrever complexas, filtros personalizados para QuerySets?
Assim como eu posso escrever
MyClass.objects.all().filter(field=val)
Eu gostaria de fazer algo parecido com isto:
MyClass.objects.all().filter(customFilter)
Eu poderia usar uma expressão gerador
(x for x in MyClass.objects.all() if customFilter(x))
mas que perderia a chainability e quaisquer outras funções as QuerySets proporcionar.
Solução
Eu acho que você pode precisar de costume gestores .
Outras dicas
A recomendação para começar a usar métodos Manager é uma boa, mas para responder sua pergunta mais direta: sim, o uso Q objetos . Por exemplo:
from django.db.models import Q
complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000)
MyModel.objects.filter(complexQuery)
objetos Q podem ser combinados com | (OR), e (E) e ~ (NOT).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow