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.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f7e72d9693645a0641809230893376e2cc4620f92bbd5c1444a39ac6845d716 |
|
MD5 | 0302d42bdf5c82dbd50af26c4c71cde8 |
|
BLAKE2b-256 | 1426dfdf9d1ca0d6b9a5830e91340d724d67bb5c8042b39ea7c04c634ba2a0bc |