如何在表单中获取当前用户?

社会演员多 python 192

原文标题How to get current user in forms?

我的 Django 项目中有一个表单。在这个表单中我可以分配人员。这是我的表单:

class AssignForm(forms.ModelForm):
    user = forms.ModelChoiceField(
        queryset=UserProfile.objects.filter(is_active=True)
        label=_(u'User')
    )

    class Meta:
        model = Customer
        fields = ('user',)

我想在这个表单中添加另一个过滤器。它是company。我在这个表单中获得了所有用户的列表,但我只想列出属于当前用户公司的用户。所以它应该是:

queryset=UserProfile.objects.filter(is_active=True, company = current_user.company)

但我无法从表单中获取请求。我该如何处理?

原文链接:https://stackoverflow.com//questions/71508160/how-to-get-current-user-in-forms

回复

我来回复
  • Willem Van Onsem的头像
    Willem Van Onsem 评论

    您可以使用以下方法覆盖表单的构造函数:

    class AssignForm(forms.ModelForm):
        user = forms.ModelChoiceField(
            queryset=UserProfile.objects.filter(is_active=True)
            label=_(u'User')
        )
    
        def __init__(self, *args, user=None, **kwargs):
            super().__init__(*args, **kwargs)
            if user is not None:
                self.fields['user'].queryset = UserProfile.objects.filter(
                    is_active=True, company__userprofile=user
                )
    
        class Meta:
            model = Customer
            fields = ('user',)

    然后在视图中传递登录用户:

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def my_view(request):
        if request.method == 'POST':
            form = AssignForm(request.POST, request.FILES, user=request.user)
            # …
        else:
            form = AssignForm(user=request.user)
        # …
    2年前 0条评论
  • Bairavan的头像
    Bairavan 评论

    您必须通过views.py中的request.user才能在表单中获取它。在您的表单中编写这个__init__函数并从您的views.py中传递用户您可以获取用户。您可以访问用户为self.userin你的表格

    class AssignForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            self.user = kwargs.get('user')
            kwargs.pop('user')
    

    在您的 views.py 中调用如下表格

    form = AssignForm(user=request.user)
    
    2年前 0条评论