-1

我正在尝试使用其相关的图像字段序列化软件模型。图像是指带有外键的软件模型,当我序列化软件模型时,我希望它也返回图像或图像路径。我无法在软件模型上创建图像字段,因为多个图像将与之相关。我将如何序列化由外键引用的模型及其相关模型?

    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)

视图.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
4

1 回答 1

0

Here is the solution. Basically I ended up using Django Rest framework. Custom relational fields feature of DRF enables you to create serializer relations.

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)
于 2014-01-25T01:52:03.380 回答