Маршрут URL-адреса DRF не соответствует общему просмотру RetrieveUpdateAPIView - PullRequest
0 голосов
/ 11 июля 2020

Я добавил следующие маршруты в свой проект Django Rest framework, URL-адрес хорошо совпадает и возвращает представление списка для заказов и запасов, однако не соответствует для подробного представления order/<int:order_no> и inventory/<int:pk>

localhost:8000/FD/orders/ работает, но localhost: 8000 / FD / order / 1 / не соответствует и возвращает

Using the URLconf defined in FriendsDigital.urls, Django tried these  
URL patterns, in this order:  
 
1. admin/  
2. ^rest-auth/  
3. ^FD/ ^inventories/$ [name='inventory_list']   
4. ^FD/  ^inventory/<int:pk>/ [name='inventory_edit']  
5. ^FD/ ^orders/ [name='orders_list']  
6. ^FD/ ^order/<int:order_no>/ [name='order_update']  

The current path, FD/order/1/, didn't match any of these

такая же проблема для инвентаря

Urls.py

urlpatterns = [
    url('^inventories/$', InventoryList.as_view(), name='inventory_list'),
    url('^inventory/<int:pk>/', InventoryRetrieveUpdate.as_view(), name='inventory_edit'),
    url('^orders/', BusinessOrderList.as_view(), name='orders_list'),
    url('^order/<int:order_no>/',BusinessOrderUpdate.as_view(), name='order_update')
]

views.py

class InventoryList(generics.ListAPIView):
    queryset= Inventory.objects.all()
    serializer_class = InventorySerializer

class InventoryRetrieveUpdate(generics.RetrieveUpdateAPIView):
    queryset = Inventory.objects.all()
    serializer_class = InventorySerializer

class BusinessOrderList(generics.ListCreateAPIView):
    queryset = BusinessOrder.objects.all()
    serializer_class = BusinessOrderSerializer

class BusinessOrderUpdate(generics.RetrieveUpdateAPIView):
    queryset = BusinessOrder.objects.all()
    serializer_class = BusinessOrderSerializer

Django версия - 3.0.7 DjangoRestFramework - 3.11.0

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Вам необходимо использовать path, если вы хотите использовать обозначение угловых скобок (<int:order_no>) для своих URL-адресов. Функция url - это псевдоним для re_path, который использует регулярные выражения

from django.urls import path

urlpatterns = [
    ...
    path('order/<int:order_no>/', BusinessOrderUpdate.as_view(), name='order_update')
]
0 голосов
/ 11 июля 2020

Поля поиска DRF по умолчанию равны 'pk', поэтому вам нужно указать поля поиска вручную:

class BusinessOrderUpdate(generics.RetrieveUpdateAPIView):
    queryset = BusinessOrder.objects.all()
    serializer_class = BusinessOrderSerializer
    lookup_field = 'order_no'
...