将变量从视图传递到Django中的表单

时间:2019-07-03 15:47:31

标签: python django

我正在构建一个简单的任务管理系统,其中一个公司可以有多个项目,每个公司都有员工。我想要一个允许经理将用户添加到项目中的表格,但要限制可用用户属于公司。

我正在将变量company_pk从视图传递到表单,但是我不确定如何在 init 函数之外设置/访问变量。

class AddUserForm(forms.Form):
    def __init__(self, company_pk=None, *args, **kwargs):
        """
        Intantiation service.
        This method extends the default instantiation service.
        """
        super(AddUserForm, self).__init__(*args, **kwargs)
        if company_pk:
            print("company_pk: ", company_pk)
            self._company_pk = company_pk

    user = forms.ModelChoiceField(
        queryset=User.objects.filter(company__pk=self._company_pk))
form = AddUserForm(company_pk=project_id)

如上所述,我只想将用户过滤到属于给定公司的用户,但是我不知道如何在 init 之外访问company_pk。我收到错误消息:NameError:未定义名称'self'

2 个答案:

答案 0 :(得分:1)

class AddUserForm(forms.Form):
    def __init__(self, company_pk=None, *args, **kwargs):
        super(AddUserForm, self).__init__(*args, **kwargs)
        self.fields['user'].queryset = User.objects.filter(company__pk=company_pk)

    user = forms.ModelChoiceField(queryset=User.objects.all())

答案 1 :(得分:0)

您必须使用self.fields覆盖用户的查询集

class AddUserForm(forms.Form):
    def __init__(self, company_pk=None, *args, **kwargs):
        super(AddUserForm, self).__init__(*args, **kwargs)
        if company_pk:
            self.fields['user'].queryset = User.objects.filter(company__pk=company_pk))

有关它的更多信息。检查一下How to dynamically filter ModelChoice's queryset in a ModelForm