peb*_*x11 3 django django-forms modelform django-queryset django-views
我想向社区询问以下有关传递request.user给querysetin的信息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']
Run Code Online (Sandbox Code Playgroud)
用
class goModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "'%s' uploaded on %s" % (obj.file_name,
obj.when_upload.date())
Run Code Online (Sandbox Code Playgroud)
所有我已经找到答案指代传递request.user到__init__或填充goForm与筛选的选择的视图。但是,在我的情况下,似乎没有任何效果,因为我将表单子类化为返回特定的字符串,并且我正在使用RadioSelect特别需要使用querysetas作为参数的小部件(对此我不是100%肯定)。那么,如何可以通过request.user在user_choice?
该模型的选择现场文档展示如何设置在该查询集__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']
Run Code Online (Sandbox Code Playgroud)
请注意,该__init__方法现在将用户作为参数,因此请记住将其传递到在视图中实例化表单的任何位置。例如:
form = goForm(user=request.user, data=request.POST)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1551 次 |
| 最近记录: |