2014-12-02 60 views
1

我想序列化一個多態模型,但只有他的基類型字段是序列化的,而不是多態的。Django - 序列化多態模型

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字段,而不是名稱。

有沒有辦法序列化多態模型?

回答

2

的原因是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")