DRF:如何将 url 与 UUID 一起使用
DRF: How to use urls with 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),
]
应用程序使用还可以,但我在测试时遇到了一些问题。
IE:
这很好用:
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
我想我可以用 router
替换 urlpatterns
来解决它并使它变得更简单
有什么办法可以用路由器实现吗?
Board_list 不是您要调用的...请尝试使用 board_get。
棋盘列表不带任何参数。但是得到确实..得到一个特定的板。
您尚未分享您的观点,但您似乎正在使用 ModelViewSet
并且您似乎正在寻找 retrieve
端点而不是 list
(从使用判断pk
)。如果是这样,那么您想使用 -detail
而不是 -list
:
url = reverse('v1:board-detail', kwargs={"pk": board.id})
所以,我想停止使用 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),
]
应用程序使用还可以,但我在测试时遇到了一些问题。 IE: 这很好用:
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
我想我可以用 router
替换 urlpatterns
来解决它并使它变得更简单
有什么办法可以用路由器实现吗?
Board_list 不是您要调用的...请尝试使用 board_get。
棋盘列表不带任何参数。但是得到确实..得到一个特定的板。
您尚未分享您的观点,但您似乎正在使用 ModelViewSet
并且您似乎正在寻找 retrieve
端点而不是 list
(从使用判断pk
)。如果是这样,那么您想使用 -detail
而不是 -list
:
url = reverse('v1:board-detail', kwargs={"pk": board.id})