在 Django 1.6 中将多个模型序列化为 json 的最佳方法是什么? [英] What's the best way to serialize more than one model to json in Django 1.6?

查看:18
本文介绍了在 Django 1.6 中将多个模型序列化为 json 的最佳方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆