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_related
和 prefetch_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 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 6a24c3e60e852c936bf63cada4305c5804958ec32b31f19f2c177cf0f9cd9cbb |
|
MD5 | d420758b51b742e7b71124dbf5150964 |
|
BLAKE2b-256 | 14559340e26adc88c469969b9a406ebb6bc2b181bb00c2c4bc29bd91e5d692ba |
关闭
django_qserializer-0.2.8-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | d4bf998a32d832bae7e9aab91098ccf12c6c244731b5cb3ac6065ba85ee69218 |
|
MD5 | 73a116e403f796e977a6e3a1b6ed37e4 |
|
BLAKE2b-256 | 7f86365605ef60dcf640e11b0d9a0b5b6e4e7f17b19a49427add920c4ad2de3e |