查询字符串,urls.py和视图中所需的更改

时间:2019-06-07 13:30:49

标签: django django-rest-framework

一个基本的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)

1 个答案:

答案 0 :(得分:0)

请尝试这种方式。

    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)

我希望我没有记错。