Как я могу добавить следующий JSON к новому URL на основе его "категории": 2?

У меня есть массив JSON на моем сервере в Django rest framework, но я хочу отфильтровать их по category, например, некоторые из них имеют 'category':1, а некоторые 'category':2 вот так:

[
            {
                "id": 667,
                "image": "https://ae0g",
                "description": "GRE",
                "price": "USD .11",
                "buy": "https://sn",
                "category": 1
            },
            {
                
                "image": "https://ae04.",
                "description": "10/13 ",
                "price": ".18",
                "buy": "https://",
                "category": 2
            }
]

Как добавить следующий JSON в новый URL на основе его "category": 2?

            "image": "https://ae04.",
            "description": "10/13 ",
            "price": ".18",
            "buy": "https://",
            "category": 2

просмотров:

class productviewset(viewsets.ModelViewSet):
    queryset=product.objects.all()
    serializer_class = productSerializer 
    pagination_class = None

    def create(self, request):
        serialized = productSerializer(data=request.data, many=True)
        if serialized.is_valid():
            serialized.save()
            return Response(serialized.data, status=status.HTTP_201_CREATED)
        return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)

    @action (detail=False , methods=['post']) 
    def delete(self,request):
        product.objects.all().delete()
        return Response('success')

Урлы:

router = routers.DefaultRouter()
router.register(r'product', productviewset,basename='product')
 

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('api/', include(router.urls)),

Предполагая, что эта штука, которую вы называете "json array", является набором объектов базы данных, вы можете применить фильтр, как описано в drf docs.Таким образом, в вашем случае потребуется переопределить get_queryset метод ModelViewSet класса.


class productviewset(viewsets.ModelViewSet):
    queryset=product.objects.all()
    serializer_class = productSerializer 
    pagination_class = None

    def get_queryset(self):
        """
        Optionally restricts the returned product to a given category,
        by filtering against a `category` query parameter in the URL.
        """
        queryset = product.objects.all()
        category = self.request.query_params.get('category')
        if category is not None:
            queryset = queryset.filter(category=category)
        return queryset

    def create(self, request):
        serialized = productSerializer(data=request.data, many=True)
        if serialized.is_valid():
            serialized.save()
            return Response(serialized.data, status=status.HTTP_201_CREATED)
        return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)

    @action (detail=False , methods=['post']) 
    def delete(self,request):
        product.objects.all().delete()
        return Response('success')

Затем, если вы нажмете /product?category=2, он должен быть отфильтрован. Также вы можете использовать пакет django-filters, но в вашем случае это излишество.

Также, когда вы пишете на Django (или на python в целом), не забывайте писать все имена классов с большой буквы, так что productviewset должно быть ProductViewSet и так далее. Я настоятельно рекомендую прочитать исходный код DRF, который хорошо написан и объясняет многие вещи :)

Счастливого кодинга!

Вернуться на верх