Group by arbitrary model fields
Project description
This package provides a mixin for Django QuerySets that adds a method group_by that behaves mostly like the values method, but with one difference: its iterator does not return dictionaries, but a model-like object with model instances for related values.
Installation
Install from PyPI:
pip install django-group-by
Compatibility
This package is compatible with Django 1.8 and 1.9, and Python versions 2.7, 3.4 and 3.5. Probably others, but those 6 combinations are the ones against which we build (by Travis CI).
Usage
Create a QuerySet subclass with the GroupByMixin to use in a model’s manager:
# models.py from django.db import models from django.db.models.query import QuerySet from django_group_by import GroupByMixin class BookQuerySet(QuerySet, GroupByMixin): pass class Book(Model): objects = BookQuerySet.as_manager() title = models.CharField(max_length=100) author = models.ForeignKey('another_app.Author') publication_date = models.DateField() ...
Then use it just like values, and you’ll get a similar query set:
>>> some_rows = Book.objects.group_by('title', 'author', 'author__nationality').distinct() >>> some_rows.count() 4
The difference is that every row is not a dictionary but an AggregatedGroup instance, with only the grouped fields:
>>> row = some_rows[0] >>> row <AggregatedGroup for Book> >>> row.title The Colour of Magic >>> row.publication_date *** AttributeError: 'AggregatedGroup' object has no attribute 'publication_date'
But of course the main advantage is that you also get related model instances, as far as you want:
>>> row.author <Author: Terry Pratchett> >>> row.author_nationality <Nation: Great Britain>
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_group_by-0.2.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2707941a25a1d86e7cf8f296ca7130be9a49365e428aba59f1cb0b4d227577d |
|
MD5 | 74e4d78a8bbdc55d1530a6e775a4c30b |
|
BLAKE2b-256 | d995f1617cf675d924c5208fab6c95a3941811b4c3d9437563801b6a928a9bbe |