django - 如何在 Django 通用视图中访问 URL 的命名组?
问题描述
给定一个像这样的网址:url(r'^foos/(?P<foo_id>[0-9]+)/bars/new/$'
如何foo_id
从CreateView
实例中访问以填充外键表单字段?我尝试了多种方法(最近覆盖get_context_data
并尝试从请求对象或 kwargs 中提取值)但均未成功。
可能有更好的方法来做到这一点(例如表单集),但我想对现有流程进行尽可能少的更改。
解决方案
您可以根据将实例传递给表单的方式覆盖 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
推荐阅读
- ruby-on-rails - 无法将 Puma 作为守护进程运行 OptionParser::AmbiguousOption: ambiguous option: -d
- php - Php - 仅当所有值都不为空时才将关联数组添加到新数组
- javascript - 如何使用 tinyMCE 3 动态创建 tinyMCE
- javascript - 在 stingify 文件后调用服务函数。角
- python - 如何在 python 中使用 cx_Oracle 根据数据类型对列应用不同的函数?
- kubernetes-pod - kubectl logs 命令抛出错误:proxyconnect tcp:tls:第一条记录看起来不像 TLS 握手
- firebase - 由于具有 Firebase 电话身份验证的 Flutter 应用程序中出现“令牌不匹配”身份验证错误,Apple 拒绝了该应用程序
- system-calls - 为什么使用 capset 后 setuid 失败?
- java - 我有一个问题,我遇到了这样的错误 [[Ljava.lang.Integer;@26f0a63f]
- docker - docker-compose up 适用于本地,而不是部署