首页 > 解决方案 > 通过 urls.py 中的 PK 过滤 django rest 框架视图时,API 视图为空

问题描述

我正在尝试通过 url 中指定的 PK 值过滤我的 APIListView。代码运行但是我的 API 是空的,即使我知道它在我正在测试的 PK 中有数据。有任何想法吗?

模型.py

class Item(models.Model):
    Description = models.CharField(max_length=20)
    Price = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return self.Description

序列化程序.py

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ('pk', 'Description', 'Price')

视图.py (API)

class SingleItemAPIView(generics.ListAPIView):
    serializer_class = ItemSerializer
    def get_queryset(self):
        item = self.request.query_params.get('pk', None)
        queryset = Item.objects.filter(pk=item)
        return queryset

网址.py

urlpatterns = [
    path('<int:pk>/',SingleItemAPIView.as_view(), name='single_object_view')
]

DRF 输出

GET /api/1/
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[]

标签: pythondjangoapidjango-rest-frameworkdjango-views

解决方案


URL参数可以在self.kwargs

class SingleItemAPIView(generics.ListAPIView):
    serializer_class = ItemSerializer

    def get_queryset(self):
        item = self.kwargs['pk']
        queryset = Item.objects.filter(pk=item)
        return queryset

推荐阅读