У меня странная проблема, когда при попытке извлечь один объект из моей базы данных я получаю сообщение {"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» не печатается. Так что это представление, очевидно, даже не достигается, почемуЭто что?
Заранее спасибо