django-rest-framework - GET 应该用于详细信息,但 POST 不应该用于 Django-Rest-Framework 中的操作方法
问题描述
在我的应用程序中,有一些元素称为DemanderCollection
行,其中包含有关称为特征集合的重要元数据Demander
我有一个 ViewSet,我用它来返回与我的数据库中Demander
的特定对象相关联的对象,这些对象DemanderCollection
编码为 GeoJSON(一种用于交换地理数据的特定 JSON),并且它绑定到一个名为的特殊操作方法geojson
:
class DemanderCollectionViewSet(
mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet
):
queryset = DemanderCollection.objects.all()
serializer_class = DemanderCollectionSerializer
@action(detail=True, methods=["get"])
def geojson(self, request, *args, **kwargs):
demanders = Demander.objects.filter(demandercollection=self.get_object())
return Response(serialize('geojson', demanders, geometry_field='geom', fields=('name',)))
这个特殊的操作方法设置为,detail=True
因为我只想返回一个DemanderCollection
值的Demander
特性。
我还想允许用户DemanderCollection
通过将 GeoJSON 发布到同一个端点(通过验证以确保属性/列有效)来发布新的。
但问题是现在该geojson
方法已经定义为 being detail=True
,所以我不能发布到端点
.../api/demandercollections/geojson
因为它期望在两者之间有一个 id,比如
.../api/demandercollections/0/geojson
我可以在发出 POST 请求时让geojson
端点忽略吗?detail=True
解决方案
推荐阅读
- php - 在 Laravel 中下载 Zip 文件时文件不存在
- xml - Oracle XMLQUERY:如何根据子节点属性找到要删除的 XML 节点?
- java - Thread.sleep() 是否停止调用线程运行方法?
- java - 用 Java 实现的二进制搜索中使用的等式和不等式运算符
- r - 如何使用 lubridate 将我的字符列更改为日期?
- arrays - Elasticsearch:当字段是数组时如何按字段对文档进行分组
- c# - 在文本框中达到 maxLength 时如何禁用“哔”声?
- go - 如何处理对数组数据
- http - 发送请求时如何使用 uTLS 连接?
- python - Discord.py - 使用反应将嵌入消息发送到另一个频道