在 Django 1.6 中将多个模型序列化为 json 的最佳方法是什么? [英] What's the best way to serialize more than one model to json in Django 1.6?
问题描述
我有 3 个模型显示如下.
class DocumentClass(models.Model):text = models.CharField(max_length=100)类文档组(模型.模型):text = models.CharField(max_length=100)documentclass = models.ForeignKey(DocumentClass)类文档类型(模型.模型):text = models.CharField(max_length=100)文档组 = 模型.ForeignKey(DocumentGroup)
我的目标是这样的:
<预><代码>[{'pk': 1,'模型':'文档类',字段":{'文本':'文档类1',文件组":[{'pk': 1,'模型':'文档组''场地':{'文本':'文档组1'}}]}},{'pk':2,'模型':'文档类',字段":{'文本':'文档类2'}}]我通常通过
序列化一个模型jsonstr = serializers.serialize("json", DocumentType.objects.all())
但是为了我的目标.我不知道.作为标题.最好的方法是什么?
以上模型的关系如下:
DocumentClass1|-文档组1||-文档类型1||-文档类型2||-...|-文档组2||-...文档类2|-文档组...||-文档类型...
如果模型相关
这将需要一些更自定义的序列化,为此您必须使用 Django Rest Framework 的序列化程序.
尝试子类化ModelSerializer
:
class DocumentTypeSerializer(serializers.ModelSerializer):元类:模型 = 文档类型类 DocumentGroupSerializer(serializers.ModelSerializer):类型 = DocumentTypeSerializer(许多=真)元类:模型 = 文档组类 DocumentClassSerializer(serializers.ModelSerializer):组 = DocumentGroupSerializer(许多=真)元类:模型 = 文档类查询集 = DocumentClass.objects.all()serializer = DocumentClassSerializer(queryset, many=True)json = JSONRenderer().render(serializer.data)
如果模型不相关
根据 Django 文档,serialize()
的第二个参数可以是任何产生 Django 模型实例的迭代器".
现在您需要将 3 种实例作为迭代器传递.似乎 Python 的 itertools.chain
是首选方法,在 here 中投票.
所以你的电话看起来像:
instances = list(chain(DocumentClass.objects.all(), DocumentGroup.objects.all(), DocumentType.objects.all())jsonstr = serializers.serialize("json", 实例)
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)
And my goal is something like this:
[
{
'pk': 1,
'model': 'DocumentClass',
'fields':{
'text':'DocumentClass1',
'documentgroup':
[
{
'pk': 1,
'model': 'DocumentGroup'
'field':
{
'text':'DocumentGroup1'
}
}
]
}
},
{
'pk': 2,
'model': 'DocumentClass',
'fields':{
'text':'DocumentClass2'
}
}
]
I usually serialize a model by
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?
Edit: The relation of above models look like:
DocumentClass1
|-DocumentGroup1
| |-DocumentType1
| |-DocumentType2
| |-...
|-DocumentGroup2
| |-...
DocumentClass2
|-DocumentGroup...
| |-DocumentType...
If The Models Are Related
This will require some more customized serialization, for which you will have to use Django Rest Framework's serializers.
Try subclassing 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)
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".
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屋!