如何将参数从视图传递到Formset Django

时间:2018-08-15 01:27:18

标签: django django-forms django-views

我想将views.py中的参数传递给forms.py中的formset Django? 我的设置:Django 2.0.7,Python 3.6.5

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以通过重写基于类的视图中的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