如何限制Django Rest Framework中的记录数量反向关系

A.J*_*.J. 12 api django rest json django-rest-framework

我开始使用Django Rest Framework,它的表现非常好.我得到了所有的东西,因为我想要它.我遇到了一个我无法回答的问题.

我正在使用反向关系.

楷模

class Province(models.Model):
    name = models.CharField(max_length=50)
    intro = models.CharField(max_length=1000, null=True, blank=True)
    description = models.TextField(max_length=10000, null=True, blank=True)

class Picture(models.Model):
    name = models.TextField("Title", max_length=10000, null=True, blank=True)
    pro = models.ForeignKey(Province, verbose_name="Province")
Run Code Online (Sandbox Code Playgroud)

当我编写省的反向关系序列化器时,例如单个省.

查看

ProToPicturesSerial(node, many=False).data
Run Code Online (Sandbox Code Playgroud)

我得到了pictures这个省的所有人.我想获得一些图片,可能是最后3张,或者最近添加的5张图片.

如何限制图片实例的数量?因为随着图片记录中的数字增长,应用程序将变得更慢.

串行

class ProToPicturesSerial(serializers.ModelSerializer):
    pro_pictures = PictureSerializer(many=True)

    class Meta:
        model = Province
        fields = ('id', 'name', 'intro', 'description', 'pro_pictures')
Run Code Online (Sandbox Code Playgroud)

如果我错过了一些明显的东西,请告诉我.

alm*_*lki 11

您可以将source属性指向PictureSerializer省上仅返回3个相关图片的方法:

class ProToPicturesSerial(serializers.ModelSerializer):
    pro_pictures = PictureSerializer(many=True, source='first_three_pics')

    class Meta:
        model = Province
        fields = ('id', 'name', 'intro', 'description', 'pro_pictures')
Run Code Online (Sandbox Code Playgroud)

class Province(models.Model):
    name = models.CharField(max_length=50)
    intro = models.CharField(max_length=1000, null=True, blank=True)
    description = models.TextField(max_length=10000, null=True, blank=True)

    def first_three_pics(self):
        return self.picture_set.all()[:3]
Run Code Online (Sandbox Code Playgroud)

  • @BilliAm 您可以在查询中使用 order_by 来控制项目顺序,例如 self.picture_set.all().order_by('-created_date')[:3] 或使用模型元排序属性.... https://docs。 djangoproject.com/en/1.7/ref/models/querysets/#django.db.models.query.QuerySet.order_by (3认同)