我们有一个 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)
我哪里做错了?有人可以指出我正确的方向吗?