Как я могу добавить следующий 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, который хорошо написан и объясняет многие вещи :)
Счастливого кодинга!