【发布时间】:2014-02-05 19:03:21
【问题描述】:
我有一个带有自定义 json 序列化程序的模型,它在转储到 json 之前执行一些处理。
现在,当获取单个 obj 时,我想使用模型中的自定义序列化程序来获取整个对象(使用上述处理)。获取列表时,我想使用默认序列化程序仅获取标头(仅呈现模型字段)。
我研究了三个选项
覆盖obj_get
def obj_get(self, bundle, **kwargs):
obj = ComplexModel.objects.get(pk=kwargs['pk'])
return obj.to_serializable()
我被扔了
{"error": "The object LONG JSON DUMP has an empty attribute 'description' and doesn't allow a default or null value."}
不知道为什么会发生这种情况——description 字段可以为空,另外——为什么 sweetpie 正在检查数据库中已有对象的验证,并且...在获取时??
使用dehydrate
def dehydrate(self, bundle):
return bundle.obj.to_serializable()
这很好,但循环是在每个对象之前执行的——所以我不知道我是在获取列表还是单个对象。这里的结果是完整的序列化对象,无论是列表还是单个条目。
创建自定义序列化程序
class CustomComplexSerializer(Serializer):
def to_json(self, data, options=None):
if isinstance(data,ComplexModel):
data = data.to_serializable()
return super(CustomComplexSerializer,self).to_json(data)
同样的问题,当获取一个条目时,序列化程序接受data.obj 中的obj,当它获取一个列表时,它接受一个字典(奇数...)。我也可以检查 bundle 是否是 dict 的一个实例——但是测试 ComplexModel 的类型感觉很尴尬。
那么实现自定义序列化以仅获取单个条目的最佳方法是什么?
【问题讨论】:
标签: django json serialization tastypie