为什么网址使用参数pk而不是pk2?

问题描述 投票:1回答:1

当我尝试发送pk2或任何其他论点时,它会引发一个AssertionError。我的意思是这个网址

path('grade/<str:pk>/', IndividualGrade.as_view(), name="get-grade")

下面的一个导致错误时不会抛出错误:

path('grade/<str:pk2>/', IndividualGrade.as_view(), name="get-grade")

我的观点很简单如下:

class IndividualGrade(generics.RetrieveUpdateDestroyAPIView):
    '''    PUT/GET/DELETE grade/{grade:pk}/    '''
    queryset = Grade.objects.all()
    serializer_class = GradeSerializer
    def put(self, request, *args, **kwargs):
        try:
            g1 = Grade.objects.get(grade=kwargs["pk"])
            serializer = GradeSerializer(g1, data=request.data)
            flag = 0
        except Grade.DoesNotExist: # Create a new grade if a grade doesn't exist
            g1 = Grade.objects.get(grade=kwargs["pk"])
            serializer = GradeSerializer(g1, data=request.data)
            flag = 1
        if serializer.is_valid():
            # call update/create here
        else:
            return Response(serializer.errors)
        return Response(serializer.data, status=status.HTTP_200_OK)

如果我编写自己的get函数(在另一个视图中尝试过),我在url中实现了pk2,但我不知道如何在不编写自己的get的情况下解决这个问题。虽然这已经讨论过here。但是我还是不确定如何在没有自己编写的情况下修复它。

python django
1个回答
2
投票

你需要添加

lookup_field = 'pk2'

当你使用的东西不是pk,它是内置的查找。当你想要网址中的其他内容时,你需要提一下。

© www.soinside.com 2019 - 2024. All rights reserved.