在Django中使用ForeignKey渲染内联formset

时间:2017-07-24 08:14:20

标签: python django django-forms django-templates inline-formset

我有两个模型Model1和Model2,其中Model2包含一个其他模型的外键(Say Model3)。我使用django内联formset来添加和编辑与Model1相关的信息。下面是我创建的Formset,字段中的md_attributes是Model3的ForeignKey字段。

inline_form_set = inlineformset_factory(Model1, Model2, fields =('md_attributes', 'val',), max_num=0, can_delete=False, extra=0)

呈现formset的模板是

{{ formset.management_form }}

{% for form in formset %}
    {{ form.id }}
    {{ form.md_attributes}}: {{ form.val }} <br><br>
{% endfor %}

 <input class="btn" type="submit" name="submit" value="Save"><br><br>
<input class="btn" formaction="{% url 'projects:admin_projects_info' project_name %}"
           type="submit" name="submit" value="Cancel">

使用上面的模板代码,formset将呈现为Foreignkey选项(Choice Field)和Textinput字段。但我试图实现的是将外键选择作为静态标签呈现在下面的

选择1:有些价值,
 选择2:价值

我尝试创建一个选项列表,然后在for循环(模板)中使用它,但是我的帖子请求正在创建一个错误。我也认为这不是解决这个问题的有效方法。任何有价值的意见都非常受欢迎感谢

1 个答案:

答案 0 :(得分:0)

您必须在表单提交时发回POST中的每个字段。例如,如果您尝试将值呈现为<p>{ value }</p>,则需要在<input type="hidden" value="{ value }"/>格式中包含某个位置,以便浏览器在POST中包含该字段。

这很容易被恶意用户操纵,因此在数据返回服务器时验证数据非常重要。其中一种方法是将字段的初始值存储在 init 格式中,无论POST中发回的内容如何,​​都要将其恢复为干净。