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

时间:2019-03-14 04:20:51

标签: django django-forms django-urls

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

我如何从foo_id实例中访问CreateView以便填充外键表单字段?我尝试了多种方法(最近重写了get_context_data并试图从请求对象或kwargs中提取值)。

也许有更好的方法(例如表单集),但我想对现有流程进行尽可能少的更改。

1 个答案:

答案 0 :(得分:1)

您可以重写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