如何获取 forms.py 中的当前签名用户?

How to get current signed user in forms.py?

我在表单中使用 ModelChoiceField select 发票提供商。在当前情况下,我 return 将所有提供程序发送到查询集。

但我应该 return 仅由签名用户创建的提供程序。 Provider 有一个名为 user.

的 ForeignKey 字段

这是我的表格:

class InvoiceCreationForm(forms.Form):
    # ...
    provider = forms.ModelChoiceField(
        label='Provider',
        required=False,
        queryset=Provider.objects.all(),
        widget=forms.Select(attrs={
            'name': 'provider',
            'class': 'form-control',
            'id': 'input-invoice-provider',
        })
    )

我需要像这样过滤对象:

Provider.objects.filter(user=current_user)

如何获得签名用户?或者如何在视图之外获取 request 对象?我尝试从表单的 __init__ 方法获取当前用户,然后将其设置为 self.user。但是我不能在 self.user.

这样的查询中使用它

让用户进入 __init__() 只是解决方案的第一部分。您还需要使用该用户来过滤查询集:

class InvoiceCreationForm(forms.Form):
    def __init__(self, *args, **kwargs):
         self.user = kwargs.pop('user', None)
         super(InvoiceCreationForm, self).__init__(*args, **kwargs)
         if self.user:
             self.fields['provider'].queryset = Provider.objects.filter(user=self.user)