我想向社区询问以下有关通过的问题request.user
到 queryset
在 ModelForm
.我的 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
在带有过滤选择的 View 中。然而,在我的情况下似乎没有任何工作,因为我已经对表单进行了子分类以返回特定的字符串并且我正在使用RadioSelect
特别需要 queryset
的小部件作为一个论点(我不是 100% 确定)。那我怎么才能通过request.user
在 user_choice
?
最佳答案
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__
方法现在将用户作为参数,因此请记住在 View 中实例化表单的任何位置传递它。例如:form = goForm(user=request.user, data=request.POST)
关于django - 使用包含 RadioSelect 小部件的 ModelChoiceField 在 ModelForm 中的查询集中获取 request.user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31517980/