Django空自身参数在ListView中,当<pk>在网址.py

2024-04-24 19:02:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想给样品取一个项目名称。它应该在里面自身参数因为我的网址.py看起来是这样(有很多网址,所以我只发布重要的网址):

项目/网址.py在

app_name = 'projects'
urlpatterns = [
    url(r"^$", ProjectListView.as_view(), name="projects_list"),
    url(r"^(\w+)/robjects/", include("robjects.urls")),
    url(r"^(\w+)/tags/$", TagsListView.as_view(), name="tag_list"),
...
]

机器人/网址.py在

^{pr2}$

样品/网址.py在

app_name="samples"
urlpatterns = [
    url(r'^list/$', SampleListView.as_view(), name='sample_list_view'),
    url(r'^create/$', SampleCreateView.as_view(), name='sample_create_view'),
    url(r'^(?P<sample_id>[0-9]+)/update/$', SampleUpdateView.as_view(), name='sample_update'),
    url(r'^(?P<sample_id>[0-9]+)/delete/$', SampleDeleteView.as_view(), name='sample_delete'),
]

我要获取项目名称,即项目的“(\w+)”部分/网址.py. 为此,我在示例中编写了代码/视图.py. 我试着做项目名称=自身参数[0]但是我的参数是空的。在

类SampleListView(ListView): 模型=样品 template_name=“样本/样本_列表.html““

    def get(self, request, *args, **kwargs):
        """A base view for displaying a list of objects."""
        # check if project exists
        try:
            pk = kwargs['pk']
            robject = Robject.objects.get(id=pk)
            # add project to view attributes
            self.robject = robject
        except Robject.DoesNotExist:
            raise Http404
        print(self.args) # it should be a project name here
        return super(SampleListView, self).get(request, *args, **kwargs)

    def get_queryset(self, *args, **kwargs):
        """
        Overwrite orginal qs and add filtering by robject
        """

        # original queryset
        qs = super().get_queryset(*args, **kwargs)
        print('args, ',self.args)
        print('kwargs', self.kwargs)
        pk = self.kwargs['pk']
        robject = Robject.objects.get(id=pk)
        return qs.filter(robject=self.robject)

这是输出:

args,  ()
kwargs {'pk': '27'}

我想通过robject_id和project_name过滤我的qs,对于robject_id,它工作得很好。我不知道如何获取项目名称进行筛选。在

此外,我不得不说,在标签中(“在url中没有包含”)我用了它自身参数[0]它是有效的,但仅限于表单标记ListView。在

代码如下:

class TagsListView(LoginRequiredMixin, ListView):
    model = Tag
    template_name = "tags/tag_list.html"

    def get(self, request, *args, **kwargs):
        """A base view for displaying a list of objects."""
        # check if project exists
        try:
            project = Project.objects.get(name=args[0]) # it works fine
            # add project to view attributes
            self.project = project
        except Project.DoesNotExist:
            raise Http404
        return super(TagsListView, self).get(request,*args, **kwargs)

我发现:

当我这样定义我的URL时:

url(r"^(\w+)/robjects/samples/$", SampleListView.as_view(), name='sample_list_view'),

所有的工作。在我的args中是项目名称,我可以通过自身参数[0]

但当我加上我的参数是空的

url(r"^(\w+)/robjects/(?P<pk>[0-9]+)/samples/$", SampleListView.as_view(), name='sample_list_view'),

当我这样定义两个夸克时:

url(r"^(?P<project_name>[\w\-]+)/robjects/(?P<pk>[0-9]+)/samples/list/$",SampleListView.as_view(), name='sample_list_view'),

args为空-正如我所料,kwargs都是正常的,并传递给视图

这是一个Django bug还是有什么方法可以使用自身参数? 它们被夸克覆盖了吗?在

谢谢你的帮助!在


Tags: samplenameselfprojectviewurl参数get
1条回答
网友
1楼 · 发布于 2024-04-24 19:02:42

看起来像只虫子。我测试过,当你把args和kwargs传入你的url时,比如:

url(r"^(\w+)/test1/(?P<pk>[0-9]+)/test2/$", TestListView.as_view(), name='list_view'),

然后ListView返回args的空元组(不应该)。 当您只将arg或kwargs传递到url中时,它就起作用了。在

相关问题 更多 >