Как запросить отфильтрованный просмотр в django restframwork - PullRequest
1 голос
/ 26 февраля 2020

Мне нужно получить отфильтрованный набор данных, вызвав HTTP-запрос с использованием Django rest framework.

вот мои коды API:

urls.py

urlpatterns = [
    path('api/get_products/', views.get_products),
]

Views.py

@api_view(["GET", ])
def get_products(request):
    category_name = request.data['category_name']
    category_obj = Category.objects.get(name=category_name)
    products_list = Product.objects.filter(category=category_obj)
    serializer = ProductSerializers(products_list)
    return Response(serializer.data)

и, наконец, serialierz.py

class CategorySerializers(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Category
        fields = ['name', 'id']


class ProductSerializers(serializers.HyperlinkedModelSerializer):
    category = CategorySerializers()

    class Meta:
        model = Product
        fields = '__all__'

, и я пытаюсь вызвать его, используя запрос get с аргументом: {'category_name':'the_name_of_the_category' }

и возвращает эту ошибку:

KeyError at /categories/api/api/get_products/
'category_name'

1 Ответ

1 голос
/ 26 февраля 2020

Ваш метод API является методом GET. Вы не можете принять тело с помощью метода get. Вы можете изменить свой метод API с помощью метода POST или лучше, вы можете получить 'category_name' с помощью URL. Вы можете добавить переменную url следующим образом:

path('api/get_products/<slug:category_name>', views.get_products),

и метод просмотра:

def get_products(request,category_name):
    category_obj = Category.objects.get(name=category_name)
    products_list = Product.objects.filter(category=category_obj)
    serializer = ProductSerializers(products_list)
    return Response(serializer.data)
...