我在Stackoverflow上看了其他类似的问题,但这些情况不适用于我。
我有一个表单,其中Queue
字段是必填字段。这个表单被用在很多地方,在一个这样的例子中,我不希望Queue
字段显示给用户。所以,我只是没有在模板上渲染它。但由于这是必填字段,表单不会提交。我如何预先填充此字段,同时对用户隐藏它?
我不能对模型或窗体的保存方法进行更改,因为该窗体也在其他地方使用。
forms.py
class PublicTicketForm(CustomFieldMixin, forms.Form):
queue = forms.ChoiceField(
widget=forms.Select(attrs={'class': 'form-control'}),
label=_('Queue'),
required=True,
choices=()
)
views.py:
def no_queue(request):
if request.method == 'POST':
form = PublicTicketForm(request.POST, request.FILES)
form['queue'] = 9 # Tried to assign queue value to field, did not work
if form.is_valid():
if text_is_spam(form.cleaned_data['body'], request):
# This submission is spam. Let's not save it.
return render(request, template_name='helpdesk/public_spam.html')
else:
form.save()
else:
form = PublicTicketForm(initial={'queue': 9}) # tried this one too, did not work either
return render(request, 'helpdesk/no_queue.html', {'form': form})
这个表单的choices
已经填充到视图中,但是因为我没有在模板中呈现它,所以我没有这样做。
6条答案
按热度按时间nwsw7zdq1#
您可以使用表单集来分配特定的值,并向用户显示特定的输入,如this
fv2wmkja2#
我昨晚才做的!
在www.example.com中forms.py,使用HiddenInput小部件声明字段(确保渲染它):
scope = CharField(max_length=60,widget=HiddenInput())
然后,在www.example.com中views.py您可以应用初始值:
form = MyForm(initial={'scope': 'public'})
或者使用CBV:
initial = {'scope':'public'}
qkf9rpyu3#
不要创建隐藏字段。创建另一个不包含该字段的表单类(子类化将防止重复),然后在视图中设置该值。
toiithl64#
您可以覆盖POST数据。
htzpubme5#
我能够在模板中做这样的事情,并且成功了!
jhdbpxl96#
我需要有一个使用GET参数填充但不显示输入字段的页面(以防止用户意外更改对象的配置),所以我在
admin.py
中这样做了: