ModelViewSet在Django Rest框架中不提供' create ' url



我有一个如下的视图集:

class EntryViewSet(viewsets.ModelViewSet):
queryset = Entry.objects.all()
serializer_class = EntrySerializer
permission_classes = [permissions.IsOwnerStaffOrReadOnly]
filter_backends = [DjangoFilterBackend, CustomOrderingFilter]
filterset_class = EntryFilterSet
ordering_fields = ["created_at", "last_update"]
ordering = "created_at"
@method_decorator(cache_page(60 * 5, key_prefix="entry"))
def list(self, *args, **kwargs):
return super().list(*args, **kwargs)
@method_decorator(cache_page(60 * 60, key_prefix="entry"))
def retrieve(self, *args, **kwargs):
return super().retrieve(*args, **kwargs)

…将其添加到相关应用程序的urls.py,使用DefaultRouter作为:

_router.register("entries", EntryViewSet, basename="entry")

然而,在我的测试中,做reverse("api:entry-create")无法找到create。我也快速检查url与Django扩展子命令show_urls,但它不打印api:entry-create,这意味着它没有注册。我是怎么做的:

python manage.py show_urls | grep "api:entry"

结果是:

/api/entries/   api.viewsets.entry.EntryViewSet api:entry-list
/api/entries/<pk>/      api.viewsets.entry.EntryViewSet api:entry-detail
/api/entries/<pk>.<format>/    api.viewsets.entry.EntryViewSet api:entry-detail
/api/entries.<format>/ api.viewsets.entry.EntryViewSet api:entry-list

…这表明只有entry-detailentry-list注册了,而我的模型显然不是ReadOnlyModelViewSet

为什么我没有api:entry-createurl?


环境
  • django ^ 2.2
  • djangorestframework ^ 3.12.4

你使用detail观点当你想做一些与特定资源利用其pk(/resource/<pk>)list当你没有/不想用pk。所以可以使用list/resource,而且POST/resource创建一个新的。当然,POST/resource是映射到create方法的。

最新更新