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)
<
The recommendation to start using manager methods is a good one, but to answer your question more directly: yes, use Q objects. For example:
from django.db.models import Q
complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000)
MyModel.objects.filter(complexQuery)
Q objects can be combined with | (OR), & (AND), and ~ (NOT).