【问题标题】:Django Model field as formfield in templatesDjango 模型字段作为模板中的表单字段
【发布时间】:2012-03-02 17:09:04
【问题描述】:

我想这是一个简单的问题,但无论这是否可能,我都无法找到明确的答案。

我有一个模型对象,它在渲染过程中被传递给我的模板。虽然我使用大多数模型字段来显示它们的值,但我发现需要将其中一些显示为表单字段(它们各自的 HTML 元素就像通过 ModelForms 呈现的那样)。此处是否可以避免使用 ModelForm 类,而只需使用模型的字段直接从模板中呈现为表单字段?

一个例子:

class MyModel(models.Model):
    month = models.PositiveIntegerField(_('Month'), choices=MONTH_CHOICES)
    year = models.PositiveIntegerField(_('Year'))

现在在基于上述模型示例的模板中,我想将年份显示为一个值,但将月份显示为带有选定当前值的下拉列表?

任何指针表示赞赏!

用例:

想象一个通用的 list_view ,例如您正在呈现查询集的情况。您所拥有的是每次迭代的对象,但是在列表视图中,您希望允许用户对少数对象属性执行一些快速编辑,以避免强制他们进入完全编辑模式(可能通过简单的 ajax)。

【问题讨论】:

  • 为什么要避免使用ModelForm?这是正确的工具。
  • modelfoms 列表是这里的解决方案。您可以使用 {{ form.instance }} 访问模型本身
  • 您将如何处理您在模板中创建的表单?
  • 好的,你已经渲染了表格,接下来呢?你需要处理它,对吧?要处理表单,您需要查看。你需要一个表单对象在你的视图中。这意味着您需要创建一个表单实例,并且这里没有过度工程。
  • 您是否根据我的问题、我的判断或我在此站点上的声誉点来判断我的 sed 技能? :) 不要冒犯我的朋友,我非常感谢您的所有反馈。我发帖的原因是想看看我是否遗漏了任何以通用方式完成的任务。

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


【解决方案1】:

没有。

正如在 cmets 中所讨论的那样,这是不可能的。模型及其字段不了解表单 - 这就是表单和模型表单的用途。

这样做的正确方法是使用模型表单包装模型对象,如果您希望使其更加透明,您可以调整(使用继承)以对非表单字段做任何您想做的事情。

在模板中创建模型表单意味着您无法在 django 中处理表单。显然您想将它们与某种 ajax 接口进行交互,所以这对您来说可能不是问题,但无论如何,我看不出它比简单地在视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2013-07-17
    • 2020-11-30
    • 2011-06-26
    • 1970-01-01
    • 2013-08-27
    • 2020-03-30
    • 1970-01-01
    相关资源
    最近更新 更多