Динамически добавленный скрытый ввод в результаты формы Django в KeyError - PullRequest
0 голосов
/ 09 июня 2019

В моем коде есть метод jQuery, с помощью которого я динамически добавляю значение в форму при отправке.Код выглядит следующим образом:

form_page.html

<form id="objectForm" class="form-horizontal" action="" method="post">
{% csrf_token %}
{% include 'manage/form-template.html'%}
    <button id="submitBtn">submit</button>
</form>

<script>
  $(document).ready(function(){
    $("#submitBtn").click(function(){
        $("#objectForm").submit(function(){
          $("<input />").attr("type", "hidden")
          .attr("name", "dates")
          .attr("value", "something")
          .appendTo("#objectForm");
          return true;
         }); // Submit the form
    });
  });
</script>

views.py

class ObjectUpdateView(UpdateView):

    template_name = 'manage/object_form.html'
    form_class = ObjectEditForm
    def get_success_url(self):
        #...
    def form_valid(self, form):
        clean = form.cleaned_data['dates']
        print('Dates: ', clean)
        return super(ObjectUpdateView, self).form_valid(form)

forms.py

class ObjectEditForm(forms.ModelForm):
 class Meta:
     model = Object
     fields = ['TestField']

Этот кодприводит к KeyError в строке clean = form.cleaned_data['dates'].Отладка значений POST в Chrome Я вижу, что само значение установлено правильно.По какой-то причине Django не регистрирует это.

Кто-нибудь может подсказать, что мне нужно сделать, чтобы получить доступ к этому значению в Python?

РЕДАКТИРОВАТЬ

Основываясь на обсуждении в комментариях, я хотел немного обновить то, что ищу.

Я знаю, что ObjectEditForm имеет только одно поле.Причина в том, что у меня есть только одно поле в моей модели Object.Другое поле dates, которое я пытаюсь добавить, я пытаюсь добавить, будет использоваться в представлении. На моем html-сайте я также использую календарь JS, из которого я собираю даты по методу отправки и помещаю их вэто дополнительное поле.

1 Ответ

0 голосов
/ 11 июня 2019

Я нашел решение. Не самый красивый, но делает работу. На самом деле нужно было сделать две вещи: 1. измените forms.py

class ObjectEditForm(forms.ModelForm):
 dates = forms.CharField(widget=forms.HiddenInput())
 class Meta:
     model = Object
     fields = ['TestField']
  1. Изменить печать полей формы. Поскольку у меня есть forloop над всеми полями, мне пришлось добавить условие if, чтобы не отображать ничего, связанного с полем dates.

Теперь, кажется, все работает. Если у кого-то есть более чистая идея, я буду признателен за это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...