Django JSON Agg
项目描述
Django JSON Agg
特性
将JSON相关的聚合函数(如PostgreSQL的json_object_agg
和json_agg
)作为Django聚合对象公开。
要求
Django版本4.2。它可能与其他版本兼容,但未对其进行测试。目前仅支持sqlite和postgresql数据库。
安装
您可以通过pip从PyPI安装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是免费和开源软件。
问题
如果你遇到任何问题,请提交问题并附带详细描述。
鸣谢
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
django_json_agg-0.0.1.tar.gz (17.5 kB 查看散列)
构建分布
django_json_agg-0.0.1-py3-none-any.whl (17.6 kB 查看散列)