【问题标题】:How to get current signed user in forms.py?如何在 forms.py 中获取当前已签名的用户?
【发布时间】:2016-10-30 11:39:52
【问题描述】:

我正在使用 ModelChoiceField 在我的表单中选择发票提供商。在当前情况下,我将所有 Providers 返回到查询集。

但我应该只返回由签名用户创建的提供者。 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 这样的查询中使用它。

【问题讨论】:

标签: python django django-forms django-authentication


【解决方案1】:

让用户进入__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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 2013-10-18
    • 2014-08-21
    • 2018-02-17
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多