Подтвердить что ты не робот

Как ограничить количество записей в обратных отношениях 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")

Когда я пишу сериализаторы обратной связи провинции, например. для одной провинции.

представления

ProToPicturesSerial(node, many=False).data

Я получаю все pictures в этой провинции. Я хочу получить несколько фотографий, может быть, последние 3, или 5 снимков, которые были добавлены в последнее время.

Как ограничить количество экземпляров изображения? Поскольку по мере того, как число увеличивается в записях изображений, приложение будет стремиться к замедлению.

Serializer

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

    class Meta:
        model = Province
        fields = ('id', 'name', 'intro', 'description', 'pro_pictures')

Сообщите мне, если я упустил что-то очевидное.

4b9b3361

Ответ 1

Вы можете указать атрибут 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')

и

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]