Django Rest Framework: правильный просмотр не обрабатывает запрос, когда я немного изменяю параметр - PullRequest
0 голосов
/ 10 декабря 2018

У меня странная проблема, когда при попытке извлечь один объект из моей базы данных я получаю сообщение {"detail":"Not found."}.Я знаю, что объект есть, потому что я вижу его в моем администраторе django.И когда я пытаюсь получить другой объект, он находит его нормально.

urls.py

router = routers.DefaultRouter()
router.register(r'recalls', views.Recalls)
admin.autodiscover()


from rest_framework import generics, permissions, serializers

from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope, TokenHasScope

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include(router.urls)),
    path('api/v1/recalls/rundate/<str:run_date>/', views.Recalls.as_view({'get': 'retrieve'}), name='retrieve_by_rundate'),
    path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),,

]

views.py

class Recalls(viewsets.ModelViewSet):
    '''
    This view will be fore retrieving a recall for a car from the database
    '''


    queryset = CarFax.objects.all()
    serializer_class = RecallsSerializer
    permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]


    def list(self, request, **kwargs):

        queryset = GetRecalls.objects.all()
        serializer = RecallsSerializer(queryset, many=True)
        print('LIST')

        return Response(serializer.data)

    def retrieve(self, request, pk=None, *args, **kwargs):

        queryset = CarFax.objects.all()
        #record = get_list_or_404(queryset, self.kwargs)
        record = get_list_or_404(queryset, vin__exact=pk)
        serializer = RecallsSerializer(record, many=True)
        print('RETRIEVE')

        return Response(serializer.data)

    def retrieve_by_rundate(self, request, run_date=None):

        queryset = CarFax.objects.all()
        #record = get_list_or_404(queryset, self.kwargs)
        record = get_list_or_404(queryset, run_date__exact=run_date)
        serializer = RecallsSerializer(record, many=True)
        print('RETRIEVE RUNDATE')

        return Response(serializer.data)

Я использую URL 'http://127.0.0.1:8000/api/v1/recalls/(?P<pk>[\w-]+)/$/' (который автоматически создается DefaultRouter(). Проблема в том, что когда я смотрю с одним параметром, скажем, test1, так что 'http://127.0.0.1:8000/api/v1/recalls/test1' работает, и в моей консоли я вижу сообщение "RETRIEVE" from my "«извлекать» метод печати. ​​Однако, когда я заменяю его другим созданным мною объектом, и я знаю, что он существует, он не обнаруживается, и сообщение «RETRIEVE» не печатается. Так что это представление, очевидно, даже не достигается, почемуЭто что?

Заранее спасибо

...