python - 更改默认 DRF 路由模式
问题描述
我的 models.py 看起来像
class Article(models.Model):
article_type = models.ForeignKey(
ArticleType,
null=True,
on_delete=models.CASCADE,
related_name='articles'
)
title = models.CharField(
max_length=100,
verbose_name='Article Title'
)
和 urls.py
router = DefaultRouter()
router.register('article', ArticleViewSet, basename='article')
urlpatterns = [
path('viewset/', include(router.urls)),
]
现在我不想列出所有带有 'article_type=None' 的文章并通过点击更新它们
http://127.0.0.1:8000/viewset/article/unmapped
有没有办法做到这一点?
解决方案
这可以使用ViewSet 操作来实现。实施将遵循以下原则:
@action(detail=True, methods=["GET", "PUT"])
def unmapped(self, request, pk=None):
if not pk:
# perform list operation
articles = self.queryset.filter(article_type=None)
serializer = self.get_serializer(articles, many=True)
return Response(serializer.data)
obj = get_object_or_404(self.queryset, pk=pk)
# map obj to article type
return Response(status=status.HTTP_200_OK)
这使用 ViewSet 操作功能。如果您需要自定义 URL,我希望您必须编写一个自定义视图并将其映射到urls.py
.
这将意味着:
- 调用
http://localhost:8000/unmapped/
将执行“列表”逻辑 - 调用
http://localhost:8000/<pk>/unmapped/
将执行更新逻辑
推荐阅读
- python - 为什么我的静态文本出现在默认位置(wxPython Phoenix)?
- azure-data-catalog - 如何通过 REST API 为 Azure 数据目录资产设置友好名称?
- regex - Apache 重写,包括查询字符串操作
- amazon-web-services - 我们可以在无服务器架构上部署 QlikSense 吗?
- asp.net - 如何解决 ASP.NET MVC 和 sql server 2019 中系统找不到文件指定错误
- java - 从 Java Spring Boot 中的 Principal 中提取数据
- lua - Lua 表被覆盖
- java - 使用真实设备在颤振中调试第一个应用程序时出错
- c++ - TBB 并行管道:过滤器时序不一致
- python - 通过 XML 文件和 netsh wlan(或 Python)更改 wifi 配置文件的密码