首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -序列化多态模型

Django -序列化多态模型
EN

Stack Overflow用户
提问于 2014-12-02 20:18:52
回答 1查看 1.2K关注 0票数 3

我想序列化一个多态模型,但是只有他的基本类型字段是序列化的,而不是多态的。

models.py

代码语言:javascript
复制
class Folder(PolymorphicMPTTModel):
    parent = PolymorphicTreeForeignKey('self', null=True, blank=True, related_name='children')
    name = models.CharField(max_length=50)

class File(Folder):
    srs_wkt = models.CharField(max_length=1000, blank=True, null=True)

views.py

代码语言:javascript
复制
from django.core import serializers
from django.core.serializers.json import DjangoJSONEncoder

file = File.objects.get(pk=1)
serialized = serializers.serialize('python', [file,])
response = json.dumps({'file':file}, cls=DjanJSONEncode)
return HttpResponse(response, content_type="application/json")

这通常是我序列化模型对象并将其作为JSON发送的方式,但是在这里,JSON对象只有srs_wkt字段,而不是名称。

有办法序列化多态模型吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-02 22:33:52

原因是Folder不是一个抽象的模型,所以您有:

https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance

在大多数地方,Django隐藏了将这两个模型绑定在一起的底层OneToOneField,但是序列化程序没有,请参见以下内容:

https://docs.djangoproject.com/en/dev/topics/serialization/#inherited-models

它们在上面的文档中为您的情况提供了一个菜谱,但它并不是很优雅,所以我建议您尝试一种替代方法,例如:

代码语言:javascript
复制
from django.core.serializers.json import DjangoJSONEncoder

def myview(request):
    file_dict = File.objects.filter(pk=1).values()[0]
    folder_dict = Folder.objects.filter(pk=file.folder.pk).values()[0]
    folder_dict.update(file_dict)
    response = json.dumps({'file': folder_dict}, cls=DjangoJSONEncoder)
    return HttpResponse(response, content_type="application/json")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27258175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档