Django-如何在URL中传递列表?

时间:2019-06-04 19:57:12

标签: django django-rest-framework

这是一个初学者的问题...但是到了。

我有一个URL subject_owner?owner_ids = 61,62,63

将这个url转发到附加视图的urls.py条目应该是什么?

我尝试了很少的选择...但是它们都不起作用,并给出错误提示,以下内容将不起作用,但是类似的方法应该可以解决问题。

url(r'^v1/subject_owner/(?P<owner_id>[a-z0-9]+)$',
    views.SubjectByOwnerViewSet.as_view({'get': 'list'}))

谢谢您的回答。还有一个问题,主要是关于接线...

我在url_pattern块的urls.py中做了相应的输入...

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

并在 init .py中连线以下内容...

    from .subject_owner import SubjectByOwnerViewSet

当我通过邮递员测试时,视图仍然没有被拾取。还有其他需要接线的地方吗?

1 个答案:

答案 0 :(得分:0)

以上是URL路径的 not 部分,它是query string [wiki]。 Django在request.GET [Django-doc]中捕获了这一点。您不会在url(..)path(..)中解析它们。您的路径未捕获该部分,因此您的url仍然像这样:

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

您可以使用request.GET['owner_id']在视图中访问它。

例如,在您的SubjectByOwnerViewSet中:

class SubjectByOwnerViewSet(ViewSet):

    def get_queryset(self, *args, **kwargs):
        owner_id_list = self.request.GET['owner_id'].split(',')
        return super().get_queryset(*args,**kwargs).filter(
            owner__in=owner_id_list
        )

当然,您也可以通过其他方法来访问它,以上只是一个假设的用例。