Заполните значение в скрытом django поле ввода в ModelForm - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть форма модели, и я вручную ввожу поля в свой шаблон.

Форма модели:

class ProductEntryForm(forms.ModelForm):

    class Meta:
        model = Product
        fields = [
            'image', 'product_name', 'price', 'options',
        ]

Отображение полей в шаблоне вручную:

<form method="POST" enctype="multipart/form-data">
   <h2>New Product</h2>
   {% csrf_token %}

   {{ form.non_field_errors }}
   <p>
      <label for="">Image</label>
      {{ form.image.errors }}
      {{ form.image }}
   </p>
   <p>
       <label for="">Product name</label>
       {{ form.product_name.errors }}
       {{ form.product_name }}
   </p>
   <p>
       <label for="">Description</label>
       {{ form.description.errors }}
       {{ form.description }}
   </p>
   ...

Поле options формы скрыто в шаблоне, поскольку пользователь не заполняет это поле напрямую. Они заполняют его из другого поля ввода.

<form method="POST" enctype="multipart/form-data">
   ...
   <p style="display: none">
       {{ form.options }}
   </p>

   <input type="text" name="visible_option_input" :value="[[make_this_value_of_{{form.options}}_when_submitted]]">
   ...
</form>

Я хочу, чтобы значение "visible_option_input" было значением {{ form.options }} при отправке

1 Ответ

0 голосов
/ 02 апреля 2020

Я решил это.

Способ сделать это - явно отобразить поле формы шаблона django (см. Этот пост в simpleisbetterthancomplex для визуализации форм django вручную):

<p style="display: none">
   <input type="text"
      name="{{ form.options.name }}"
      id="{{ form.options.id_for_label }}"
      {% if form.options.value != None %}
         value="{{ form.options.value|stringformat:'s' }}"
      {% endif %}
      maxlength="{{ form.options.field.max_length }}"
      {% if form.options.field.required %}
         required
      {% endif %}>
</p>

Затем я использовал Vuejs, чтобы связать значение из поля visible_option_input с django: я заменил значение формы django:

{% if form.options.value != None %}
   value="{{ form.options.value|stringformat:'s' }}"
{% endif %}

на :

v-model="my_v-model_property"

Я использовал Vuejs, но вы можете использовать обычный js или любой другой инструмент, который вам нравится.

...