Django DRF - 添加 subview /url?

标签 django django-rest-framework

我想在更改查询集的 View 下创建一个 subview (如果这是正确的术语?)

parent URL
mysite.com/api/sites

Child URL
mystic.com/apit/sites/open

而且每个 URL 都可以这样搜索

parent URL
mysite.com/api/sites/search=London

Child URL
mystic.com/api/sites/open/search=London

我的父 View 、序列化程序和 URL 已存在

class SiteROView(viewsets.ReadOnlyModelViewSet):
    queryset = Site.objects.all()
    serializer_class = SiteSerializer
    permission_classes = (IsAdminUser,)
    filter_class = Site
    filter_backends = (filters.SearchFilter,)
    search_fields = ('location','postcode','state')

所以我想我需要以某种方式添加子网址

class SiteROView(viewsets.ReadOnlyModelViewSet):
    queryset = Site.objects.all()
    serializer_class = SiteSerializer
    permission_classes = (IsAdminUser,)
    filter_class = Site
    filter_backends = (filters.SearchFilter,)
    search_fields = ('location','postcode','state')

    def url_open:
        queryset = Site.objects.filter(state='open')

这可能吗?我该如何实现?

谢谢

最佳答案

您可以使用detail_route装饰器来做到这一点

from rest_framework.response import Response

class SiteROView(viewsets.ReadOnlyModelViewSet):
    ..........
    # your codes up here

    @list_route(methods=['get'],url_path='open' permission_classes=[YourPermissionClass])
    def open(self, request, *args, **kwargs):
         # your rest of code and response
         queryset = <your_filtered_queryset>
         serializer = self.serializer_class(queryset, many=True)
         return Response(data=serializer.data)

关于Django DRF - 添加 subview /url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57198173/

相关文章:

python - 尝试传递字符串以通过 Django Rest Framework url 进行查询

Django 休息框架缓存策略

python - Django 休息框架。通过查询参数超链接实体

python - 获取单个模型的多个查询集列表

python - ValueError : set_wakeup_fd only works in main thread on Windows on Python 3. 8 使用 Django 3.0.2 或 Flask 2.0.0

python - Django:强制一个字段对于具有相同外键的所有模型对象都是唯一的

django - SLL 从 Django 中的 apache 进行身份验证

python - 如何为特定模型实例设置添加、删除、更新和查看权限?

django - Django REST Framework 故意引发错误时的事务错误

django - 在 django-rest-framework 中使用 .to_representation() 和 .to_internal_value?