def complex_filter(self, filter_obj):
if isinstance(filter_obj, Filter):<EOL><INDENT>clone = self._clone()<EOL>clone._filters.add(filter_obj)<EOL>return clone<EOL><DEDENT>return self._filter_or_exclude(None, **filter_obj)<EOL>
Returns a new QuerySet instance with filter_obj added to the filters.

filter_obj can be a Q object (or anything with an add_to_query()
method) or a dictionary of keyword lookup arguments.

This exists to support framework features such as 'limit_choices_to',
and usually it will be more natural to use other methods.