我正在尝试将 id 列表传递到隐藏字段: POST 结果是:
POST in add_document:<QueryDict: {'csrfmiddlewaretoken': ['xxx', 'xxx'], 'person_ids': ['15129', '15161', '15177', '15217'], 'submit': ['Submit']}>
views.py:
(...)
add_document_form = DocumentForm(request.POST or None, context = context, initial={'person_ids': '1'})
context['add_document_form'] = add_document_form
print(add_document_form.fields['person_ids'].initial)
html_template = loader.get_template('backend/' + context['load_template'])
return HttpResponse(html_template.render(context, request))
(...)
forms.py:
class DocumentForm(forms.ModelForm):
# person_ids = forms.MultipleChoiceField(widget = forms.HiddenInput())
person_ids = forms.CharField(widget = forms.HiddenInput())
def __init__(self, *args, **kwargs):
context = kwargs.pop('context', None)
super(DocumentForm, self).__init__(*args, **kwargs)
print(self.fields['person_ids'].initial)
self.fields['person_ids'].initial = '2'
print(self.fields['person_ids'].initial)
但无论我做什么 - 终于我得到了
<input type="hidden" name="person_ids" value="15217" id="id_person_ids">
Django 完全忽略我的初始设置...(而 print 总是打印正确的值...
我最好的解决方案是:
<input type="hidden" name="person_ids" value="['15129', '15161', '15177', '15217']" id="id_person_ids">
将小部件更改为 TextField 不会改变任何内容。 person_ids的值仍然是'15217'
我很惊讶
DocumentForm(request.POST
)与DocumentForm(initial=request.POST)
不同....
所以解决方案是:
if 'take_action' in request.POST:
add_document_form = DocumentForm(context = context, initial = request.POST)
else:
add_document_form = DocumentForm(request.POST or None, context = context)