繁体   English   中英

将用户名传递给Django表单

[英]Pass username to Django form

所以我有一个自定义窗体,我需要在其中传递request.user.username,以便我可以根据用户访问它的方式来填写form.ModelChoiceField。 这是我所拥有的

views.py

if request.method == 'POST':
    form = DepartmentForm(request.POST, username=request.user.username)
    # Do stuff
else:
     form = DepartmentForm(username=request.user.username)

forms.py

class DepartmentForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.username = kwargs.pop('username', None)
        super(DepartmentForm, self).__init__(*args, **kwargs)

    Company = forms.ModelChoiceField(queryset=Company.objects.raw('''
      SELECT DISTINCT c.id, c.name, c.createdBy, c.allowedTeam_ID FROM projects_company AS c
      LEFT JOIN auth_user_groups AS aug ON c.allowedTeam_id=aug.group_id
      LEFT JOIN auth_user AS au ON aug.user_id=au.id
      WHERE au.username = %s OR c.createdBy = %s''',
     [self.username, self.username]),
     empty_label='Select company', widget=forms.Select(attrs={'class': 'materialSelect', 'id': 'companyDropdown'}))

但是当我尝试选择填写self.username时,出现了NameError:未定义名称'self'

我尝试搜索我的解决方案,但发现没有一个可行。 希望您能提供任何帮助。 如果您需要更多信息,请随时询问,我将相应地更新问题。 这是我得到的错误

第25行,在DepartmentForm [self.username,self.username]中),NameError:未定义名称'self'Wich是我根据self.username选择查询的结尾

加载模块时将评估Company = forms.ModelChoiceField()行。 此时,您无权访问self.username

相反,您应该在表单的__init__方法中设置queryset

class DepartmentForm(forms.Form):
    company = forms.ModelChoiceField(
        queryset=Company.objects.none(),  # use empty queryset now, we'll set the real queryset when the form is initialised
        widget=forms.Select(...),
    )

    def __init__(self, *args, **kwargs):
        self.username = kwargs.pop('username', None)
        super(DepartmentForm, self).__init__(*args, **kwargs)

        self.fields['company'].queryset = Company.objects.raw(...)

您可以使用字典预先填充任何字段:

if request.method == 'POST':
    # do stuff
else:
    form = DepartmentForm({"username":request.user.username})

要么

if request.method == 'POST':
    # do stuff
else:
    form = DepartmentForm()
    form.initial = {"username":request.user.username}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM