如何覆盖POST填充的值

问题描述 投票:0回答:1

我正在尝试将 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'

django django-forms render
1个回答
0
投票

我很惊讶

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)
© www.soinside.com 2019 - 2024. All rights reserved.