Django GroupBy
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 this repository:
pip install -e https://github.com/kako-nawao/django-group-by.git
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>
Release files for django-group-by 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_group_by-0.1.1.tar.gz | 4.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_group_by-0.1.1-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 11.8 kB
Release files / django_group_by-0.1.1.tar.gz
| Download URL | django_group_by-0.1.1.tar.gz |
|---|---|
| Size | 4.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
71a18b2e602b677d66bbe2e7af4688021a21bad4ff66a555b6177c030f59a9a9
|
|
BLAKE2b-256 checksum How to use checksums |
b9659822ef79ab8387564f22cd0870775a9e479a51d8540892218fced144bd41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / django_group_by-0.1.1-py2.py3-none-any.whl
| Download URL | django_group_by-0.1.1-py2.py3-none-any.whl |
|---|---|
| Size | 6.9 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
d8b1019a7da1ac46afe3ddc8595c9e44f53bbd87e1513ca0a2e02154c40e9b2f
|
|
BLAKE2b-256 checksum How to use checksums |
54b8f164fab12da2bf13d2b7f72396ea37e829cddd059f5584fd8002d2275e93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |