DRF: Как использовать урлы с UUID

Итак, я хотел бы перестать использовать urlpatterns и просто использовать router. Но вместо использования ID объекта я использую UUID, и я использую его с urlpatterns и не могу найти способ использовать его с routers. вот моя текущая модель:

class Board(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=200, blank=False, null=False)

это мое основное приложение urls.py:

...

router = DefaultRouter()
router.register(r'boards', BoardViewSet)
router.register(r'y', yViewSet)
router.register(r'z', zViewSet, basename='z')


urlpatterns = [
    path('', include(router.urls)),
    path('board-list/<uuid:pk>/', BoardViewSet.as_view({'get': 'list'}), name='boards'),
]

и это проект urls.py:

from django.contrib import admin
from django.urls import path, include
from core.urls import router as api_router

routes = []
routes.extend(api_router.urls)

urlpatterns = [
    path('api/', include((routes, 'board_microservice'), namespace='v1')),
    path('admin/', admin.site.urls),
]

использование приложения в порядке, но у меня есть некоторые проблемы с тестированием. Т.е: это работает хорошо:

url = reverse('v1:board-list')

    response = api_client().get(
        url
    )

и не работает:

board = baker.make(Board)
url = reverse('v1:board-list', kwargs={"pk": board.id})
response = api_client().get(url)

Я получаю

django.urls.exceptions.NoReverseMatch: Reverse for 'board-list' with keyword arguments

и я думаю, что могу заменить urlpatterns на router, чтобы решить эту проблему и сделать ее более простой

Есть ли способ сделать это с помощью роутера?

Board_list - это не то, что вы хотите вызвать... Попробуйте вместо этого вызвать board_get.

Board list не принимает аргументов. Но get принимает. Чтобы получить конкретную доску.

Вы не поделились своим мнением, но похоже, что вы используете ModelViewSet и, похоже, ищете конечную точку retrieve, а не list (судя по использованию pk). Если это так, то вы хотите использовать -detail вместо -list:

url = reverse('v1:board-detail', kwargs={"pk": board.id})
Вернуться на верх