Проблема передачи queryset фреймворка отдыха Django

У меня есть проблема в течение нескольких дней, но так и не получил никакого решения, я пробовал разные подходы, но без успеха. Я хочу передать несколько наборов запросов в одном представлении или пути.

@api_view(['GET'])
def getProduct(request, pk):
    product = Product.objects.get(_id=pk)
    related = Product.objects.filter(category=product.category).exclude(_id=pk).order_by('?')[:4]
    print(related)
    serializer = ProductSerializer(product, many=False)
    return Response(serializer.data)
    

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

Я получил некоторое решение, которое подсказало мне, что нужно обратиться к сериализаторам и изменить там. Но я так не думаю, потому что я пробовал, но как это возможно. Так что у кого-нибудь есть лучшее решение. Мой связанный объект имеет тот же сериализатор, который является producterializer. но в конечном итоге это связанный продукт.

#это мой класс сериализатора

class ProductSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = Product
        fields = '__all__'

    def get_user(self, obj):
        user = obj.user
        serializer = VendorSerializer(user, many=False)
        return serializer.data

Вы можете реализовать ProductWithRelatedSerializer, который использует ProductSerializer для сериализации продуктов. Таким образом, мы создаем подкласс из ProductSerializer:

class ProductWithRelatedSerializer(ProductSerializer):
    related = serializers.SerializerMethodField(read_only=True)

    def get_related(self, obj):
        related = Product.objects.filter(
            category_id=obj.category_id
        ).exclude(_id=obj.pk).order_by('?').select_related('user')[:4]
        ps = ProductSerializer(related, many=True)
        return ps.data

В .select_related(…) [Django-doc] нет необходимости, но это увеличит get_user метод ProductSerializer для связанных продуктов.

Таким образом, ответ будет выглядеть следующим образом:

{
    /* … */
    "user": {
        …
    },
    related: [
         { "user": { … } },
         { "user": { … } },
         { "user": { … } },
         { "user": { … } }
    ]
}
Вернуться на верх