当我尝试发送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。但是我还是不确定如何在没有自己编写的情况下修复它。
你需要添加
lookup_field = 'pk2'
当你使用的东西不是pk,它是内置的查找。当你想要网址中的其他内容时,你需要提一下。