Is there, in Django, a standard way to write complex, custom filters for QuerySets?
Just as I can write
MyClass.objects.all().filter(field=val)
I'd like to do something like this :
MyClass.objects.all().filter(customFilter)
I could use a generator expression
(x for x in MyClass.objects.all() if customFilter(x))
but that would lose the chainability and whatever other functions the QuerySets provide.
I think you may need custom managers.
The recommendation to start using manager methods is a good one, but to answer your question more directly: yes, use Q objects. For example:
Q objects can be combined with | (OR), & (AND), and ~ (NOT).