将 url 参数发送到通用视图,该视图将其发送到 ModelForm 中的元素
Posted
技术标签:
【中文标题】将 url 参数发送到通用视图,该视图将其发送到 ModelForm 中的元素【英文标题】:Sending url parameter to generic view which sends it to an element in a ModelForm 【发布时间】:2014-04-07 14:45:09 【问题描述】:我通过一个 url 向一个通用视图发送一个可选值,该视图使用这样的 Modelform:
class myClass(generic.CreateView):
template_name = 'template.html'
form_class = myForm
...
模型形式类似于:
class myForm(ModelForm):
institution = CustomModelChoiceField(...)
class Meta:
model = myModel
...
我需要将下拉字段中的默认选择值设置为url中传递的值。
传递的值是模型的“id”。
-
如何将值传递给 myForm?
myForm 如何将其设置为“选定”值?
我愿意接受其他方式来做到这一点。
大局:
我有一个 form1(模型 1),我在其中弹出另一个 form2(模型 2)(模型 1 的外键)。 form2 成功后,form1 下拉菜单设置为新的外键。
我曾考虑过通过 AJAX 来实现,但对于未来的功能,最好在 url 中传递值。
再次,向其他方式开放。
谢谢。
【问题讨论】:
【参考方案1】:如果我理解正确,您可以重写 get_form_kwargs
方法以将 id
传递给表单构造函数(请参阅 this)
# views.py
def get_form_kwargs(self):
kwargs = super(CreateView, self).get_form_kwargs()
kwargs.update('id': self.kwargs.get('id'))
return kwargs
# forms.py
def __init__(self, *args, **kwargs):
id = kwargs.pop('id', None)
super(Form, self).__init__(*args, **kwargs)
self.fields['id'].initial = id
【讨论】:
不起作用,我收到以下错误:__init__() got an unexpected keyword argument 'id' 我知道出了什么问题,我编辑了你的答案,你可能还看不到。从本质上讲,kwargs 必须返回到它们的原始形式,因此:在调用 'init' 中的 'super' 之前需要 my_arg_val = kwargs.pop('id', None)。 @Ryan 是的,这是我的疏忽,抱歉 =)以上是关于将 url 参数发送到通用视图,该视图将其发送到 ModelForm 中的元素的主要内容,如果未能解决你的问题,请参考以下文章