Страница Django не найдена в /auth1/Timings / 2/

#django #django-rest-framework #django-views

#django #django-rest-framework #django-просмотры

Вопрос:

Я знаю, что с моими URL-адресами что-то не так. Но я не могу в этом разобраться.

models.py

 class Restaraunt(models.Model):

    name=models.CharField(max_length=50,blank=True,null=True)

class Schedule(models.Model):
    restaraunt=models.ForeignKey(Restaraunt, on_delete=models.CASCADE,related_name='restaraunt_name')
    #days=models.CharField(choices=DAYS,max_length=255)
    opening_time=models.TimeField(auto_now=False,auto_now_add=False)
    closing_time=models.TimeField(auto_now=False,auto_now_add=False)
    
    def __str__(self):
        return str(self.restaraunt)

class Restarasunt(viewsets.ViewSet):

    def create(self,request):
        try:
            name=request.data.get('name')
            if not name:
                return Response({"message": "name is rerquired!","success":False},
                            status=status.HTTP_200_OK )
            res_obj=Restaraunt()
            res_obj.name=name
            print(res_obj.name)
            res_obj.save()
            return Response("Restaurant addedd successfully")            
        except Exception as error:
            traceback.print_exc()
            return Response({"message":str(error),"success":False},status = status.HTTP_200_OK)

class ScheduleViewSet(viewsets.ViewSet):

    def create(self,request,pk):
        try:
            res_obj=Restaraunt.objects.filter(pk=pk)
            print('hie',res_obj)
            data=request.data
            opening_time=data.get('opening_time')
            closing_time=data.get('closing_time')
            
            sce_obj=Schedule()
            sce_obj.opening_time=opening_time
            sce_obj.closing_time=closing_time
            sce_obj.restaraunt=res_obj
            sce_obj.save()

            
            
            return Response("")            
        except Exception as error:
            traceback.print_exc()
            return Response({"message":str(error),"success":False},status = status.HTTP_200_OK)
  

URLS.PY

 from rest_framework.routers import DefaultRouter

from auth1 import views

router=DefaultRouter()


router.register(r'retaraunt', views.Restarasunt, basename='Restarasunt')

router.register(r'Timings', views.ScheduleViewSet, basename='ScheduleViewSet')

urlpatterns = router.urls
  

Комментарии:

1. измените эту строку res_obj=Restaraunt.objects.filter(pk=pk) как res_obj=Restaraunt.objects.get(pk=pk) . Вы пытаетесь получить только одну запись , но фильтр возвращает набор запросов.

2. @adnankaya по-прежнему выдает ту же ошибку, путь не найден, нужно ли мне передавать pk еще где-нибудь?

Ответ №1:

Как показано в документации, вам необходимо добавить retrieve метод для вашего класса

 class UserViewSet(viewsets.ViewSet):
    """
    A simple ViewSet for listing or retrieving users.
    """
    def list(self, request):
        queryset = User.objects.all()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk=None):
        queryset = User.objects.all()
        user = get_object_or_404(queryset, pk=pk)
        serializer = UserSerializer(user)
        return Response(serializer.data)

  

Комментарии:

1. приятель, он запущен в методе обновления, поместите метод в postman

Ответ №2:

Я не думаю, что представление create предназначено для использования с «pk». Можете ли вы попробовать получить значение «pk» из запроса.данные и использовать их для получения объекта Restaraunt