Почему URL работает с параметром pk, а не с pk2? - PullRequest
1 голос
/ 03 апреля 2019

Когда я пытаюсь отправить pk2 или любой другой аргумент, он вызывает AssertionError. Я имею в виду, что URL

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)

Я понял, pk2 в URL работает, если я напишу свою собственную функцию get (пробовал в другом представлении), но я не знаю, как это исправить, не написав свою собственную get. Пока это обсуждалось здесь . Но я все еще не уверен, как это исправить, не написав свой собственный get.

1 Ответ

2 голосов
/ 03 апреля 2019

вам нужно добавить

lookup_field = 'pk2'

, когда вы используете что-то другое, кроме pk, который встроен для поиска.когда вы хотите что-то еще в URL, вы должны упомянуть об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...