我在 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'
),
]
答案 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}}
注意:从 django-3.1 开始,url(…)
[Django-doc] 是
不赞成使用 re_path(…)
[Django-doc]。
此外,路径转换器还引入了一种新的路径语法:
为此使用 path(…)
[Django-doc]。