我正在构建一个简单的任务管理系统,其中一个公司可以有多个项目,每个公司都有员工。我想要一个允许经理将用户添加到项目中的表格,但要限制可用用户属于公司。
我正在将变量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'
答案 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