Skip to main content

Group by arbitrary model fields

Project description

https://img.shields.io/github/license/kako-nawao/django-group-by.svg https://img.shields.io/pypi/pyversions/django-group-by.svg https://img.shields.io/pypi/v/django-group-by.svg https://img.shields.io/travis/kako-nawao/django-group-by.svg https://img.shields.io/codecov/c/github/kako-nawao/django-group-by.svg

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, 1.9 and 1.10, and Python versions 2.7, 3.4, 3.5 and 3.6. Probably others, but those 12 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

django_group_by-0.3.1.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

django_group_by-0.3.1-py2.py3-none-any.whl (8.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django_group_by-0.3.1.tar.gz.

File metadata

File hashes

Hashes for django_group_by-0.3.1.tar.gz
Algorithm Hash digest
SHA256 4f1a17b61c7d16924a1c7afcea3ceb42c217c5c845fd03ad6e54fda4b6c710db
MD5 e158d8388867f1eb7fbf8b3efc40a4e9
BLAKE2b-256 c80ab98b8fbb9cd8879e13b5bfebcdda90e5d2490b90bacfd272dbfc6f7d6ad7

See more details on using hashes here.

File details

Details for the file django_group_by-0.3.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_group_by-0.3.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 b4e554c0eb9eed39c0cdc64de20fa7b2906ad92408d6a47b5bc55764711fc2e5
MD5 d5547d8dde8637fcb8d6d67ccaee81a8
BLAKE2b-256 efeae44706b97580d021d6e175c2a186e05c6eb05ae8b034cc3d490b99b32862

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page