跳转到主要内容

Django查询集和序列化一起使用

项目描述

django-qserializer

Django QSerializer最初是Buser的一个内部项目,旨在改进我们的序列化过程。

数据库查询和序列化是两个分离的步骤,但实际上是ORM耦合的。在序列化之前必须从数据库中检索关系,但Django没有一种简单的方式来设置这一点。

从一个自定义管理器 SerializableManager 开始。

from django.db import models
from django_qserializer import SerializableManager


class Company(models.Model):
    name = models.CharField(max_length=64)


class Bus(models.Model):
    objects = SerializableManager()
    company = models.ForeignKey(Company, on_delete=models.SET_NULL)

一个基本的序列化实现将是

class BusSerializer(BaseSerializer):
    select_related = ['company']

    def serialize_object(self, obj):
        return {
            'id': self.id,
            'company': {
                'name': self.company.name,
            }
        }

将序列化器添加到你的查询集中

buses = Bus.objects.to_serialize(BusSerializer).all()

for bus in buses:
    # The serialize method is bound to BusSerializer.serialize_object.
    print(bus.serialize())

API

BaseSerializer.select_related

带有 select_related 调用的要添加到查询集中的模型字段列表。

BaseSerializer.prefetch_related

带有 prefetch_related 调用的要添加到查询集中的模型字段列表。

class BusSerializer(BaseSerializer):
    prefetch_related = ['company']

    def serialize_object(self, obj):
        return {
            'id': self.id,
            'company': {
                'name': self.company.name,
            }
        }

BaseSerializer.prepare_queryset

一个可调用的函数,可以改变查询集。可以使用它实现 select_relatedprefetch_related 属性,但它们与 prepare_queryset 一起工作。

class BusSerializer(BaseSerializer):
    select_related = ['company']

    def prepare_queryset(self, qs):
        return qs.annotate(state=Value('broken'))

BaseSerializer.prepare_objects

在对象加载到内存后准备它们。将数据批量添加到它们中,例如从缓存中获取信息并附加到已加载的对象。

BaseSerializer.serialize_object

必需实现。它将 Django 模型转换为可序列化的字典。在此避免缓慢的调用,因为它会导致 N+1 问题。

BaseSerializer.serialize

为每个模型对象执行 serialize_object

项目详情


下载文件

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

源分布

django_qserializer-0.2.8.tar.gz (7.4 kB 查看散列)

上传时间

构建分布

django_qserializer-0.2.8-py3-none-any.whl (8.4 kB 查看散列)

上传时间 Python 3

由以下支持

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