我想序列化一个多态模型,但是只有他的基本类型字段是序列化的,而不是多态的。
models.py
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
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字段,而不是名称。
有办法序列化多态模型吗?
发布于 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
它们在上面的文档中为您的情况提供了一个菜谱,但它并不是很优雅,所以我建议您尝试一种替代方法,例如:
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")https://stackoverflow.com/questions/27258175
复制相似问题