2011-05-28 52 views
4

序列化Django模型可以说我有以下两个Django的(1.3)模型与反向单对单字段JSON

from django.db import models 
class Patient(models.Model): 
    name = models.CharField('Name', max_length=50) 

class Address(models.Model): 
    town = models.CharField('Town/Village', max_length=50) 
    patient = models.OneToOneField(Patient, related_name='address') 

现在,当我尝试使用Django的串行到患者模型的实例序列化到JSON ,由此产生的JSON字符串没有它的地址细节(它无法遍历一对一关系的相反方向)

如果我使用select_related('address')来填充地址对象放入缓存中。 即

from django.core import serializers 
>>> print serializers.serialize('json',[Patient.objects.select_related('address').get(id=1)]) 

是否有办法解决这个问题?

+0

我很想知道这个答案 – shawnwall 2011-06-02 18:37:13

回答

0

这个问题出现在我目前正在开发的项目中。在我们决定自己扩展Django序列化程序之前,以下是我们要使用的解决方案。这应该可以满足您的需求。

要解决问题出来弄脏你的手,我会推荐wadofstuff's Django Full Serializers

使用维基解决您的例子看起来像这样得到它安装后:

您需要的方法添加到您的模型,返回QuerySet的蟒蛇表示。

from django.db import models 
from django.core import serializers 
class Patient(models.Model): 
    name = models.CharField('Name', max_length=50) 

    def extra_address(self): 
     return serializers.serialize('python', self.address.all()) 

class Address(models.Model): 
    town = models.CharField('Town/Village', max_length=50) 
    patient = models.OneToOneField(Patient, related_name='address') 

然后,您可以将该方法添加到更强健的序列化程序所采用的额外列表中。

from django.core import serializers 
print serializers.serialize('json', Patient.objects.all(), extras=('extra_address',)) 

extras键将被添加到字典中,将有你在它需要信息的任何额外碎片。