【发布时间】:2019-04-03 05:06:10
【问题描述】:
当我尝试发送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。但是我仍然不确定如何在不编写自己的 get 的情况下修复它。
【问题讨论】: