AttributeError: объект 'Request' не имеет атрибута 'query_param'

Views.py -

@api_view(['GET']) def view_items(request): if request.query_params: items = Item.objects.filter(**request.query_param.dict()) #error line else: items=Item.objects.all() serializer=ItemSerializer(items,many=True) if items: return Response(serializer.data) else: return Response(status=status.HTTP_404_NOT_FOUND)

**request.query_param следует заменить на **request.query_params.

Допустим, вы хотите фильтровать по имени.

@api_view(['GET'])
def view_items(request):
    name = request.query_params.get("name", None)
    if name:
        items = Item.objects.filter(name=name)

Я бы посоветовал вам использовать django-filters, это лучший способ структурировать код.

Создать приложение элемента

urls.py

app_name = "app-name"

router = SimpleRouter()
router.register("items", ItemViewSet, basename="item")

views.py

class ItemViewSet(views.ModelViewSet):
    queryset = Item.objects.all()
    serializer_class = ItemSerializer
    filterset_class = ItemFilterSet

serializers.py

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ("id", "name", "label")

filters.py

from django_filters import rest_framework as filters


class ItemFilterSet(filters.FilterSet):
    class Meta:
        model = Item
        fields = ("name", "label")

Удачи!

(Совет на следующий раз, пожалуйста, форматируйте код, добавляя внутри ```)

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