Categories are hierarchies, modelled using django-treebeard and the "Materialized Path" model. Each product can exist in multiple categories, with one flagged as canonical (not yet constrained to just one).
Categories can be added to a product with item.add_category_from_breadcrumbs(string)
The string should be in the form of a simple breadcrumb trail, eg:
"Books > Fantasy > Epic"
The string gets split on the '>' character and converted into categories (they get created if they don't already exist.
There's also a CategoryView which lets you browse the products via the hierarchy, doesn't yet support search queries or faceting.