首页 > 解决方案 > 查询字符串、urls.py 和视图中所需的更改

问题描述

一个基本的 django 问题,但难倒我。

我有一个端点的现有视图。 http://localhost:8001/v1/subject - 从主题模型返回所有​​主题。

我想提供一个新的端点... http://localhost:8001/v1/subject?owner_ids=60,61,62

“urls.py”定义中所需的更改是什么?

''' def query_set ''' views/subject.py 中的方法,

我已经添加了该方法,但它没有按预期工作。

这是 urls.py 的定义,需要进行任何更改以适应查询字符串吗?

router.register(r'subjects', views.SubjectsViewSet)

我应该做这样的事情吗?

    url(r'^v1/subjects/',
        views.SubjectViewSet.as_view({'get': 'list'}))

另外,这是我的views/subjects.py 文件... def get_queryset 中的逻辑可能有效,但是如何连接urls.py 条目以便查询字符串localhost:8001/v1/subjects?owner_ids=60,61,62与常规 localhost:8001/v1/subjects 一起提供?

class SubjectViewSet(Subject.get_viewset()):
    pagination_class = SubjectPagination

    def get_queryset(self, *args, **kwargs):
                owner_id_list = 
        self.request.GET['owner_ids'].split(',')
        owner_id_list_integer = []
        for i in owner_id_list:
            owner_id_list_integer.append(int(i))
        queryset = Subject.objects.all()

        if owner_id_list is None:
            return None
        else:
            return queryset.filter(organization__in=owner_id_list)

SubjectUserRoleViewSet = Subject.get_by_user_role_viewset(
    SubjectViewSet, GroupRoleMap, Role)

标签: djangodjango-rest-framework

解决方案


请试试这个方法。

    def get_queryset(self, *args, **kwargs):
        splited = self.request.GET['owner_ids'].split(',')
        filtered_nums = list(filter(None, splited))
        try:
            get_nums = list(map(int, filtered_nums))
        except ValueError as exc:
            return Subject.objects.none()
        else:
            return Subject.objects.filter(organization__in=get_nums)

我希望,我没有错误。


推荐阅读