跳转到主要内容

Django JSON Agg

项目描述

Django JSON Agg

PyPI Status Python Version License

Read the documentation at https://django-json-agg.readthedocs.io/ Tests Codecov

pre-commit Ruff codestyle

特性

将JSON相关的聚合函数(如PostgreSQL的json_object_aggjson_agg)作为Django聚合对象公开。

要求

Django版本4.2。它可能与其他版本兼容,但未对其进行测试。目前仅支持sqlite和postgresql数据库。

安装

您可以通过pipPyPI安装Django JSON Agg

$ pip install django-json-agg

并将其添加到Django设置中的INSTALLED_APPS

INSTALLED_APPS = [
    # other apps
    'json_agg',
]

用法

假设您有以下模型

class Post(models.Model):
    """Model representing a blog post."""

    title = models.CharField(max_length=100, null=True, unique=True)
    content = models.TextField(null=True)
    author = models.ForeignKey(
        "tests.Author", related_name="posts", on_delete=models.CASCADE
    )


class Author(models.Model):
    """Model representing a blog post Author."""
    name = models.CharField(max_length=100)

如果您想获取所有作者对象及其帖子,格式化为字典,其中标题作为键,内容作为值,您可以运行以下命令

from json_agg import JSONObjectAgg

from .models import Author


queryset = Author.objects.annotate(
    post_map=JSONObjectAgg("posts__title", "posts__content")
).all()

在上面的示例中,Author实例将具有一个属性post_map,它将是一个字典。

还有一个类似的聚合器,JSONArrayAgg

有关详细信息,请参阅参考

这个项目适合我吗?

django-json-agg旨在提高以字典或列表形式聚合数据的同时保持其他模型实例的易用性。这一切都在一个查询中完成。有人可能会认为它还通过在数据库中构建字典/列表而不是在Python端来提高一些效率。

然而,对django-json-agg和JSON数据结构的一般依赖,用于存储“关系”数据可能是一个反模式或问题或次优数据库模式设计的指标。你可能将时间花在重构模型以使用更多原生数据类型和关系(外键、索引等)上会更好。

没有这个项目,可以使用以下方式达到与上述示例类似的结果:

from collections import defaultdict

from json_agg import JSONObjectAgg

from .models import Author, Post


posts = Post.objects.values_list("author_id", "title", "content")
posts_per_author = defaultdict(dict)
for author_id, title, content in posts:
    posts_per_author[author_id][title] = content

authors = Author.objects.all()
# accessing posts per author
for author in Author.objects.all():
    author_posts = posts_per_author[author.id]

贡献

欢迎贡献。要了解更多信息,请参阅贡献指南

许可证

根据GPL 3.0许可证分发,Django JSON Agg是免费和开源软件。

问题

如果你遇到任何问题,请提交问题并附带详细描述。

鸣谢

此项目由@cjolowiczHypermodern Python Cookiecutter模板生成。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django_json_agg-0.0.1.tar.gz (17.5 kB 查看散列)

上传时间

构建分布

django_json_agg-0.0.1-py3-none-any.whl (17.6 kB 查看散列)

上传时间 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面