Django 没有从 url 参数中获取 id

时间:2020-12-28 13:35:19

标签: python django

我在 Django 上有这些序列化程序

class CarManagerSerializer(serializers.ModelSerializer):

    class Meta:
        model = Manager
        fields = '__all__'

和这个视图类

class CarManagerViewSet(APIView):
    allowed_methods = ('GET',)

    def get(self, request, manager_id = None):
        if manager_id is None:
            managers = Manager.objects.all().order_by('-name')
            serializer = CarManagerSerializer(managers , many=True)
            serializer_data = serializer.data
            return Response(serializer_data, status=status.HTTP_200_OK)
        else:
            managers = Manager.objects.get(id = manager_id).select_related('cars')
            serializer = CarManagerSerializer(managers , many=True)
            serializer_data = serializer.data
            return Response(serializer_data, status=status.HTTP_200_OK)

我正在尝试通过经理 ID 获取经理

http://127.0.0.1:8000/carmanagers/3

但是 manager_id 不会传递给视图,我一直收到“无” 我错过了哪里? 下面是网址

urlpatterns = [
    url(
        r'carmanagers/(?P<manager_id>[0-9]+)/$',
        CarManagerViewSet.as_view(),
        name='car-managers'
    ),
    url(
      r'carmanagers',
      CarManagerViewSet.as_view(),
      name='car-managers'
    ),
]

1 个答案:

答案 0 :(得分:1)

原因是你的路径末尾没有斜线,所以第一个路径不会立即匹配,但是第二个路径匹配,因为缺少锚< /em>。这意味着您的 carmanagers 路径将在每次路径包含 urlpatterns = [ url( r'carmanagers/(?P<manager_id>[0-9]+)/$', CarManagerViewSet.as_view(), name='car-managers' ), url( # ↓ anchors ↓ r'^carmanagers/$', CarManagerViewSet.as_view(), name='car-managers' ), ] 时匹配。您应该添加开始和结束锚点:

{{1}}

<块引用>

注意:从 开始,url(…) [Django-doc] 是 不赞成使用 re_path(…) [Django-doc]。 此外,路径转换器还引入了一种新的路径语法: 为此使用 path(…) [Django-doc]