Skip to content

Instantly share code, notes, and snippets.

@joshourisman
Created November 15, 2012 04:37
Show Gist options
  • Save joshourisman/4076677 to your computer and use it in GitHub Desktop.
Save joshourisman/4076677 to your computer and use it in GitHub Desktop.
for Model, relations in RELATIONSHIPS.items():
fields = [relations[relation]['field'] \
for relation in relations \
if relations[relation]['model'] is Constituent]
relationship_fields = {field: '{}_constituent_id'.format(field) \
for field in fields}
or_filters = [Q(**{'{}__isnull'.format(field): True}) \
for field in fields]
null_relations = reduce(lambda x, y: x | y, or_filters)
filters = null_relations
if constituent_id is not None:
id_filters = [Q(**{field: constituent_id}) \
for field in relationship_fields.values()]
ids = reduce(lambda x, y: x & y, id_filters)
filters = null_relations & ids
objects = Model.objects.filter(filters)
yield objects, relationship_fields
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment