Как ограничить количество объектов, передаваемых из вложенной сериализации - PullRequest
0 голосов
/ 15 октября 2018

Store имеет внешний ключ для SimilarStore.Обычно в similarstore_set около сотни подобных магазинов.Можно ли ограничить количество аналогичных магазинов в similarstore_set, когда я создаю API с Django REST Framework?

serializer.py

class SimilarStoreSerializer(ModelSerializer):

    class Meta:
        model = SimilarStore
        fields = ('domain', )


class StoreSerializer(ModelSerializer):

    similarstore_set = SimilarStoreSerializer(many=True)

    class Meta:
        model = Store
        fields = '__all__'

ОБНОВЛЕНИЕ

В следующих кодах выбрасывается 'Store' object has no attribute 'similarstores_set', на самом деле similarstore_set, почему выдает ошибку?

class StoreSerializer(ModelSerializer):

    image_set = ImageSerializer(many=True)
    promotion_set = PromotionSerializer(many=True)

    similar_stores = SerializerMethodField()

    def get_similar_stores(self, obj):
        # get 10 similar stores for this store
        stores = obj.similarstores_set.all()[:10]  <-- This line throws the error
        return SimilarStoreSerializer(stores, many=True).data

    class Meta:
        model = Store
        fields = '__all__'

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вы можете использовать SerializerMethodField для выполнения пользовательского поиска и ограничения количества записей:

class StoreSerializer(ModelSerializer):
    similar_stores = serializers.SerializerMethodField()

    def get_similar_stores(self, obj):
        stores = obj.similarstore_set.all()[:10] # get 10 similar stores for this store
        return SimilarStoreSerializer(stores, many=True).data

    class Meta:
        model = Store
        fields = '__all__'
0 голосов
/ 15 октября 2018

Вы можете добавить serializers.SerializerMethodField() для similarstore_set и определить метод, который будет запрашивать данные SimilarStore и установить similarstore_set.Вы можете передать желаемое количество элементов в similarstore_set, передав контекст в ваш сериализатор.см. https://www.django -rest-framework.org / api-guide / serializer / # включая дополнительный контекст

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...