首页 > 解决方案 > 如何在 Django 通用视图中访问 URL 的命名组?

问题描述

给定一个像这样的网址:url(r'^foos/(?P<foo_id>[0-9]+)/bars/new/$'

如何foo_idCreateView实例中访问以填充外键表单字段?我尝试了多种方法(最近覆盖get_context_data并尝试从请求对象或 kwargs 中提取值)但均未成功。

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

标签: djangodjango-formsdjango-urls

解决方案


您可以根据将实例传递给表单的方式覆盖 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

推荐阅读