在ModelForm的隐藏的django输入字段上填充值

时间:2020-04-02 16:58:53

标签: django django-forms

我有一个模型表单,我正在将字段手动输入到模板中。

模型形式:

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 :(得分:0)

我解决了。

执行此操作的方法是显式呈现django模板表单字段(有关手动呈现django表单的信息,请参见simpleisbetterthancomplex上的帖子)

<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或您喜欢的任何其他工具。