【发布时间】:2019-01-21 22:05:07
【问题描述】:
我想将参数从 views.py 传递到 forms.py Django 中的表单集? 我的设置:Django 2.0.7、Python 3.6.5
谢谢你帮助我。
【问题讨论】:
标签: django django-forms django-views
我想将参数从 views.py 传递到 forms.py Django 中的表单集? 我的设置:Django 2.0.7、Python 3.6.5
谢谢你帮助我。
【问题讨论】:
标签: django django-forms django-views
您可以通过覆盖基于类的视图中的get_form_kwargs 方法来实现。 Here是文档中的一个小描述,here你可以找到源代码。
get_form_kwargs 所做的是将关键字参数字典以表单形式传递给__init__。所以你必须在两个地方改变你的代码——views.py 和 forms.py。
例子:
views.py
class CreatePost(generic.CreateView):
# SOMETHING HERE
def get_from_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs.update({"user", self.request.user})
return kwargs
forms.py
class PostForm(forms.ModelForm):
# SOMETHING HERE
def __init__(self, *args, **kwargs):
user = kwargs.pop("user", None)
super().__init__(*args, **kwargs)
if user is not None:
self.fields["group"].queryset = models.Group.object.filter(members = user)
我在上面的代码中所做的是将用户从视图传递到表单,然后获取用户所属组的查询集(在组模型中有成员 ManyToManyField)。
有人还发布了另一个例子here。
【讨论】: