首页 > 解决方案 > 我在 Django 休息框架 APIView 类中得到位置参数为空。为什么?以及如何将价值传递给它?

问题描述

我玩 DRF 只是为了好玩,我正试图通过它的 ID 获取单条记录。

这是我的设置:

Django 版本 2.1.4

DjangoRestFramework 3.9.0

模型.py

class BoardModel(models.Model):
    board_title = models.CharField(
        ...
    )
    board_c_time = models.DateTimeField(
        ...
    )

网址.py

urlpatterns = [
    re_path(r'^get_board(?P<pk>\d*)$', views.GetBoard.as_view(), name="get-board"),
]

序列化程序.py

class GetBoardSerializer(serializers.ModelSerializer):
"""Board serializer."""

class Meta:
    model = BoardModel
    fields = ("id", "board_title", "board_c_time")

视图.py

class GetBoard(APIView):
"""Get single board."""

def get_object(self, pk):
    """Search for the object."""
    try:
        return models.BoardModel.objects.get(pk=pk)
    except models.BoardModel.DoesNotExist:
        raise Http404

def get(self, request, pk, format=None):
    """GET method."""
    pk = int(request.query_params.get('pk'))
    obj = self.get_object(pk)
    serializer = GetBoardSerializer(obj)
    return Response(serializer.data)

向 发送 GET 请求my_url.com/api/get_board?pk=123

get类方法中的位置参数“pk”GetBoard应该从pkurl 中的参数(例如 pk='123')中获取值,但是它返回一个空字符串。

因此,我必须通过它来访问它,request.query_params.get('pk')但它对我来说看起来很奇怪。

我错过了什么?

如何将 URL 参数中的值获取到上述 get 方法中的位置参数中?

提前非常感谢!

标签: pythondjangodjango-rest-framework

解决方案


如果您要将参数作为查询参数发送,这些参数是在?字符后面的 url 中标识的参数,那么您需要通过request.query_params. 如果你想通过 url 传递它,那么你应该将你的 urls.py 调整为:

urlpatterns = [
    re_path(r'^get_board/(?P<pk>\d*)$', views.GetBoard.as_view(), name="get-board"),
]

那么你的网址应该是:my_url.com/api/get_board/123


推荐阅读