2014-01-24 38 views
-1

我在嘗試序列化與其相關圖像字段的軟件模型。圖像被稱爲與外鍵的軟件模型,當我序列化軟件模型我希望它返回圖像或圖像路徑以及。我無法在軟件模型上創建圖像字段,因爲多個圖像將與其相關。我將如何序列化一個模型及其相關模型,這些模型是由外鍵引用的?在Django中序列化相關模型

class Software(models.Model): 
     """ 
     Base model for listings 

     """ 
     SOFTWARE_TYPE = (
     ('R', 'Retail'), 
     ('H', 'Hospitality'), 
     ) 
     objects = SoftwareManager() 
     slug = models.SlugField(unique=True,blank=True, null=True) 
     submitted_by = models.ManyToManyField(User, blank=True, null=True) 
     title = models.CharField(max_length=120, blank=True, null=True) 
     developer = models.CharField(max_length=120, blank=True, null=True) 
     address = models.CharField(max_length=120, blank=True, null=True) 
     city = models.CharField(max_length=60, blank=True, null=True) 
     state = models.CharField(max_length=60, blank=True, null=True) 
     zipcode = models.CharField(max_length=5, blank=True, null=True) 
     description = models.TextField(blank=True, null=True) 
     objects = models.GeoManager() 
     rating = RatingField(range=5,weight=5,can_change_vote=True) 
     business_size = models.ManyToManyField("BusinessSize", related_name="software-business-size") 
     review = generic.GenericRelation("Review") 
     def __unicode__(self): 
      #return "%s %s %s"%(self.title, self.point.x, self.point.y) 
      return "%s"%(self.title) 
     @models.permalink 
     def get_absolute_url(self): 
      return ('software-detail',(), 
         { 
          'slug' :self.slug, 
         }) 
     def save(self, *args, **kwargs): 
      if not self.slug: 
       self.slug = slugify(self.title) 
      super(Software, self).save(*args, **kwargs) 

     def natural_key(self): 
      return (self.title, self.developer) 

     class Meta: 
      unique_together = (('title', 'developer'),) 

class SoftwareImage(models.Model): 
     software = models.ForeignKey(Software, related_name="softwareimages") 
     image = models.ImageField(upload_to='software/%Y/%m/%d', default='static/img/no-thumb.jpg', null=True, blank=True) 

Views.py

def software_list_ajax_all(request): 
     result = Software.objects.all().select_related() 
     result = serializers.serialize('json', result, relations=('software',), extras=('__unicode__','get_absolute_url')) 

     return HttpResponse(result, content_type="application/json") 

JSON響應

1: Object 
extras: Object 
__unicode__: "test " 
get_absolute_url: "/software/test/" 
__proto__: Object 
fields: Object 
address: "test " 
business_size: Array[1] 
city: "test" 
description: "" 
developer: "test" 
rating_score: 0 
rating_votes: 0 
slug: "test" 
state: "CA " 
submitted_by: Array[0] 
title: "Comcash " 
zipcode: "test" 
__proto__: Object 
model: "softwareapp.software" 
pk: 3 

回答

0

這裏是溶液。基本上我最終使用Django Rest框架。 Custom relational fields DRF的功能使您能夠創建串行器關係。

class SoftwareImageField(serializers.RelatedField): 
    def to_native(self, value): 
     return '%s' % (value.image.url) 


class SoftwareSerializer(serializers.HyperlinkedModelSerializer):  
    absurl = serializers.Field(source='get_absolute_url') 
    softwareimages = SoftwareImageField(many=True) 
    class Meta: 
     model = Software 
    fields = ('url','title','developer','absurl','slug','softwareimages') 

Views.py

def software_list_ajax_all(request): 
    result = Software.objects.all() 
    serializer = SoftwareSerializer(result) 
    return JSONResponse(serializer.data)