在Django 1.6中将多个模型序列化为json的最佳方法是什么? [英] What's the best way to serialize more than one model to json in Django 1.6?
问题描述
我有3个模特,如下所示.
I have 3 models show as below.
class DocumentClass(models.Model):
text = models.CharField(max_length=100)
class DocumentGroup(models.Model):
text = models.CharField(max_length=100)
documentclass = models.ForeignKey(DocumentClass)
class DocumentType(models.Model):
text = models.CharField(max_length=100)
documentgroup = models.ForeignKey(DocumentGroup)
我的目标是这样的:
[
{
'pk': 1,
'model': 'DocumentClass',
'fields':{
'text':'DocumentClass1',
'documentgroup':
[
{
'pk': 1,
'model': 'DocumentGroup'
'field':
{
'text':'DocumentGroup1'
}
}
]
}
},
{
'pk': 2,
'model': 'DocumentClass',
'fields':{
'text':'DocumentClass2'
}
}
]
我通常通过
jsonstr = serializers.serialize("json", DocumentType.objects.all())
但出于我的目标.我不知道. 作为标题.最好的方法是什么?
But for my goal. I have no idea. As the title. What is the best way to do that?
以上模型的关系如下:
The relation of above models look like:
DocumentClass1
|-DocumentGroup1
| |-DocumentType1
| |-DocumentType2
| |-...
|-DocumentGroup2
| |-...
DocumentClass2
|-DocumentGroup...
| |-DocumentType...
推荐答案
模型是否相关
这将需要一些更自定义的序列化,对于这些序列化,您将必须使用 Django Rest Framework的序列化器.
尝试子类化ModelSerializer
:
class DocumentTypeSerializer(serializers.ModelSerializer):
class Meta:
model = DocumentType
class DocumentGroupSerializer(serializers.ModelSerializer):
types = DocumentTypeSerializer(many=True)
class Meta:
model = DocumentGroup
class DocumentClassSerializer(serializers.ModelSerializer):
groups = DocumentGroupSerializer(many=True)
class Meta:
model = DocumentClass
queryset = DocumentClass.objects.all()
serializer = DocumentClassSerializer(queryset, many=True)
json = JSONRenderer().render(serializer.data)
如果模型不相关
根据 Django docs ,serialize()
的第二个参数可以是任何产生Django模型实例的迭代器".
If The Models Are Not Related
According to the Django docs, the 2nd argument to serialize()
can be "any iterator that yields Django model instances".
现在,您需要传递3种实例作为迭代器.似乎在这里.
Now you'll need to pass your 3 kinds of instances as an iterator. It seems like Python's itertools.chain
is the preferred method, as voted here.
所以您的通话看起来像这样:
So your call would look something like:
instances = list(chain(DocumentClass.objects.all(), DocumentGroup.objects.all(), DocumentType.objects.all())
jsonstr = serializers.serialize("json", instances)
这篇关于在Django 1.6中将多个模型序列化为json的最佳方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!