Skip to main content

Django GroupBy

https://img.shields.io/travis/kako-nawao/django-group-by.svg?style=plastic https://img.shields.io/coveralls/kako-nawao/django-group-by.svg?style=plastic

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)

Source distribution for django-group-by 0.1.1
File Size Uploaded
django_group_by-0.1.1.tar.gz 4.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-group-by 0.1.1
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page