【问题标题】:Referencing model attributes within form在表单中引用模型属性
【发布时间】:2019-03-19 15:18:59
【问题描述】:

我希望在一个页面上同时编辑多个模型。我没有使用表单集,而是让它与我在视图中的模板中循环的表单数组一起工作:

{% extends 'app_base.html' %} {% block content %}
<p>{{message}}</p>
<form method="post">{% csrf_token %} {% for form in forms %}{{ form.as_p }}{% endfor %}
    <input type="submit" value="Submit" />
</form>
{% endblock %}

但是,烦人的是,我在输出中看不到我正在编辑的内容,因为它只是一堆没有标签的文本框。

因此,有什么方法可以在我循环时访问表单旁边的模型属性:

{% for form in forms %}{{form.object.name}}: {{ form.as_p }}{% endfor %}

【问题讨论】:

  • 您的表单是ModelForm 吗?如果是这样,form.instance 是正在更新的instance,假设您使用instance 初始化每个表单。
  • 伟大的@dirkgroten,就像一个魅力。你能写一个答案让我接受吗?

标签: python django django-models django-forms django-templates


【解决方案1】:

如果您对所有表单都使用 ModelForm,则需要使用正在更新的模型实例 (MyForm(data=request.POST, instance=...)) 对其进行初始化。

您可以访问表单的instance,它只是表单上的一个属性:form.instance

请注意,它始终存在于ModelForm,即使您在初始化时没有传递instance。在这种情况下,它是表单模型的初始化实例,而不是保存实例。所以form.instance.pk = None 在这种情况下。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多