代码之家  ›  专栏  ›  技术社区  ›  pdoherty926

如何在Django通用视图中访问URL的命名组?

  •  0
  • pdoherty926  · 技术社区  · 7 年前

    给出如下url: url(r'^foos/(?P<foo_id>[0-9]+)/bars/new/$'

    我怎样才能访问 foo_id 从一年之内 CreateView 实例以填充外键表单字段?我尝试了很多方法(最近一次是覆盖 get_context_data 并试图从请求对象或kwargs中提取值,但没有成功。

    可能有更好的方法来实现这一点(例如表单集),但我希望对现有流程进行尽可能少的更改。

    1 回复  |  直到 7 年前
        1
  •  1
  •   p14z    7 年前

    您可以覆盖get_form_kwargs或get_initial,具体取决于将实例传递给表单的方式:

    class MyView(CreateView):
        def get_form_kwargs(self):
            """Return the keyword arguments for instantiating the form."""
            kwargs = super().get_form_kwargs()
            kwargs['foo'] = Foo.objects.get(id=self.kwargs['foo_id'])
            return kwargs
    
    

    class MyView(CreateView):
        def get_initial(self):
            """Return the initial data to use for forms on this view."""
            initial = super().get_initial()
            initial['foo'] = Foo.objects.get(id=self.kwargs['foo_id'])
            return initial