This modules containts abstractions for accessing some internal parts of Django ORM that are used in hvad. The intent is that anytime some code in hvad needs to access some Django internals, it should do so through a function in this module.

hvad.query.query_terms(model, path)

This iterator yields all terms in the specified path, along with full introspection data. Each term is output as a named tuple with the following members:

  • depth: how deep in the path is this term. Counted from zero.
  • term: the term string.
  • model: `` the model the term is attached to. It will start with passed ``model then walk through relations as terms are enumerated.
  • field: the actual field, on the model, the term refers to.
  • translated: whether the field is a translated field (True) or a shared fielf (False).
  • target: the target model of the relation, or None if not a relational field.
  • many: whether the target can be multiple (that is, it is a M2M or reverse FK).

If a field is not recognized, it is assumed the path is complete and everything that follows is a query expression (such as __year__in). Query expression terms will be yielded with field set to None.


Iterator that recursively yields all key-value pairs of a Q object. Each pair is yielded as a 3-tuple: the pair itself, its container and its index in the container. This allows modifying it.


Iterator that recursively yields all nodes in an expression tree.


Iterator that recursively yields all fields of a where node. It is used to determine whether a custom Q object included a language_code filter.