使用包含 RadioSelect 小部件的 ModelChoiceField 在 ModelForm 的查询集中获取 request.user
Get request.user in queryset in a ModelForm with a ModelChoiceField that contains a RadioSelect widget
我想向社区询问以下有关将 request.user
传递给 ModelForm
中的 queryset
的问题。我的 ModelForm
是:
class goForm(ModelForm):
user_choice = goModelChoiceField(
widget=forms.RadioSelect,
queryset=Document.objects.all().filter(who_upload=request.user),
empty_label=None,
to_field_name='docfile',
label = 'Please select'
)
class Meta:
model = go
fields = ['user_choice']
与
class goModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "'%s' uploaded on %s" % (obj.file_name,
obj.when_upload.date())
我找到的所有答案都涉及将 request.user
传递给 __init__
或使用过滤后的选择填充视图中的 goForm
。然而,在我的情况下似乎没有任何效果,因为我已经将表单分类为 return 一个特定的字符串,而且我正在使用
RadioSelect
小部件特别需要 queryset
作为参数(我对此不是 100% 确定)。那么如何在 user_choice
中传递 request.user
呢?
model choice field docs 展示了如何在 __init__
方法中设置查询集。
class goForm(ModelForm):
user_choice = goModelChoiceField(
widget=forms.RadioSelect,
queryset=None,
empty_label=None,
to_field_name='docfile',
label = 'Please select'
)
def __init__(self, user, *args, **kwargs):
super(goForm, self).__init__(*args, **kwargs)
self.fields['user_choice'].queryset = Document.objects.all().filter(who_upload=user)
class Meta:
model = go
fields = ['user_choice']
请注意,__init__
方法现在将用户作为参数,因此请记住在视图中实例化表单的任何地方传递它。例如:
form = goForm(user=request.user, data=request.POST)
我想向社区询问以下有关将 request.user
传递给 ModelForm
中的 queryset
的问题。我的 ModelForm
是:
class goForm(ModelForm):
user_choice = goModelChoiceField(
widget=forms.RadioSelect,
queryset=Document.objects.all().filter(who_upload=request.user),
empty_label=None,
to_field_name='docfile',
label = 'Please select'
)
class Meta:
model = go
fields = ['user_choice']
与
class goModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "'%s' uploaded on %s" % (obj.file_name,
obj.when_upload.date())
我找到的所有答案都涉及将 request.user
传递给 __init__
或使用过滤后的选择填充视图中的 goForm
。然而,在我的情况下似乎没有任何效果,因为我已经将表单分类为 return 一个特定的字符串,而且我正在使用
RadioSelect
小部件特别需要 queryset
作为参数(我对此不是 100% 确定)。那么如何在 user_choice
中传递 request.user
呢?
model choice field docs 展示了如何在 __init__
方法中设置查询集。
class goForm(ModelForm):
user_choice = goModelChoiceField(
widget=forms.RadioSelect,
queryset=None,
empty_label=None,
to_field_name='docfile',
label = 'Please select'
)
def __init__(self, user, *args, **kwargs):
super(goForm, self).__init__(*args, **kwargs)
self.fields['user_choice'].queryset = Document.objects.all().filter(who_upload=user)
class Meta:
model = go
fields = ['user_choice']
请注意,__init__
方法现在将用户作为参数,因此请记住在视图中实例化表单的任何地方传递它。例如:
form = goForm(user=request.user, data=request.POST)