我有这段代码:
# 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
过滤表单中的数据?
答案 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)