按任意模型字段分组

django-group-b的Python项目详细描述


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

此包为Django查询集提供了一个MIXIN,添加了一个方法^ {TT1}$ 其行为主要类似于values方法,但有一点不同:它的迭代器不 返回字典,但返回一个model-like对象,该对象具有相关值的模型实例。

安装

从pypi安装:

pip install django-group-by

兼容性

这个包与django 1.8、1.9和1.10以及python版本2.7、3.4、3.5和3.6兼容。 可能还有其他的,但这12种组合正是我们所要建立的(travis ci)。

用法

使用GroupByMixin创建一个queryset子类,以在模型的管理器中使用:

# 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()
...

然后像values一样使用它,您将得到一个类似的查询集:

>>> some_rows = Book.objects.group_by('title', 'author', 'author__nationality').distinct()
>>> some_rows.count()
4

不同之处在于,每一行不是一个字典,而是一个aggregatedgroup实例,只有分组字段:

>>> 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'

当然,它的主要优点是,您还可以根据需要获得相关的模型实例:

>>> row.author
<Author: Terry Pratchett>
>>> row.author_nationality
<Nation: Great Britain>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧