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.

Foi útil?

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
scroll top