2014-12-02 4 views
1

다형성 모델을 직렬화하고 싶지만 그의 기본 유형 필드 만 다형성이 아닌 직렬화됩니다.Django - 다형성 모델 직렬화

나는 보통 여기 내 모델 객체를 직렬화 및 JSON로 보내지 만 위해 할 방법 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 객체 만 srs_wkt있다 필드가 아니라 이름.

다형성 모델을 직렬화하는 방법이 있습니까?

답변

2

이유는 Folder이 추상 모델되지 않는 것입니다, 그래서 당신은이 :
https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance

는 대부분의 장소에서 장고 함께 두 모델을 결합하는 기본 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")