gpt4 book ai didi

python - 在 Django 1.6 中将多个模型序列化为 json 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 03:44:31 26 4
gpt4 key购买 nike

我有 3 个模型,如下所示。

    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())

但为了我的目标。我不知道。正如标题。最好的方法是什么?

编辑:上述模型的关系如下:

DocumentClass1
|-DocumentGroup1
| |-DocumentType1
| |-DocumentType2
| |-...
|-DocumentGroup2
| |-...
DocumentClass2
|-DocumentGroup...
| |-DocumentType...

最佳答案

模型是否相关

这将需要一些更自定义的序列化,为此您必须使用 Django Rest Framework's serializers .

尝试子类化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 docsserialize() 的第二个参数可以是“生成 Django 模型实例的任何迭代器”。

现在您需要将 3 种实例作为迭代器传递。看来 Python 的 itertools.chain 是首选方法,投票 here .

所以你的电话看起来像这样:

instances = list(chain(DocumentClass.objects.all(), DocumentGroup.objects.all(), DocumentType.objects.all())
jsonstr = serializers.serialize("json", instances)

关于python - 在 Django 1.6 中将多个模型序列化为 json 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39152899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com