如何让request.user过滤django表单中的数据?

时间:2017-07-21 19:29:50

标签: django filter

我有这段代码:

# forms.py
channels = Channel.objects.filter(company=user)
channel = forms.ChoiceField(
    choices=channels, 
    widget=forms.Select(attrs={'class': 'form-control'})
)

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

def clean_channel(self):
    channel = self.cleaned_data.get('channel')
    if self.user:
        return channel

user并未定义。

如何让request.user过滤表单中的数据?

2 个答案:

答案 0 :(得分:2)

你已经在__init__获得了它,所以你应该在那里进行过滤。

channel = forms.ModelChoiceField(
    queryset=Channel.objects.all(), 
    widget=forms.Select(attrs={'class': 'form-control'})
)

def __init__(self, *args, **kwargs):
    self.user = kwargs.pop('user', None)
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['channel'].queryset = Channel.objects.filter(company=user)

注意,我已将您的字段类型更改为ModelChoiceField,它接受一个queryset参数。

答案 1 :(得分:0)

另一种方法是在你的观点中做这样的事情

channel = forms.ModelChoiceField
    (queryset=Channel.objects.all(), 
    widget=forms.Select(attrs= {'class': 'form-control'}))

所以不要过度使用__init__,而是在In views.py

中执行类似的操作
form = ChannelForm()
form.fields['channel'].queryset = Channel.objects.filter(company=user)