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

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

问题描述

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

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