首页 > 解决方案 > 使用 drf-nested-routers 时 Django Rest Framework“找不到页面”错误

问题描述

我们有一个 API,允许用户保存他们的玩家资料清单。API 端点是:

/api//api/inventory-live-collection/
/api/inventory-live-collection/20 # gets a single listing from InventoryLiveCollection

但是,此响应中的一个字段非常大,因此我们希望能够对其进行分页并发出请求,例如:

/api/inventory-live-collection/20/needed-inventory/

根据文档, drf-nested-routers 包是处理这个问题的方法。文档还使它看起来非常易于使用,但我一定遗漏了一些东西,因为我收到“页面未找到”错误。

这是 urls.py :

router = routers.DefaultRouter()
router.register(r'inventory-live-collection', views.InventoryLiveCollectionView)

inventory_live_collection_router = routers.NestedSimpleRouter(
    router,
    r'inventory-live-collection',
    lookup='inventory_live_collection'
)

inventory_live_collection_router.register(
    r'needed-inventory',
    views.NeededInventoryView,
    basename='needed-inventory'
)

urlpatterns = [
    path('admin/', admin.site.urls), 
    path('api/', include(router.urls)),
    path('api/inventory-live-collection/', include(inventory_live_collection_router.urls)),
]

视图.py

class NeededInventoryView(viewsets.ModelViewSet):
    def get_queryset(self):
        return PlayerProfile.objects.filter(inventory_live_collection=self.kwargs['inventory_live_collection_pk'])

我不认为模型是问题,但这里是model.py。

class PlayerProfile(models.Model):
    card_id = models.CharField(max_length=120, unique=True, primary_key=True)
    name = models.CharField(max_length=120, null=True)

class InventoryLiveCollection(models.Model):
    needed_inventory = models.ManyToManyField(PlayerProfile, related_name="needed_inventory")
    date = models.DateTimeField(null=True, blank=True)

我哪里做错了?有人可以指出我正确的方向吗?

标签: djangodjango-rest-frameworkdrf-nested-routers

解决方案


推荐阅读