【问题标题】:show form data in template在模板中显示表单数据
【发布时间】:2013-06-14 13:53:13
【问题描述】:

在我的应用程序中,我在表单中保留了一些选项。选项是复选框输入,用户可以单击并保存选项。在数据库中保存的选项存储为整数,如 1、2、3。如何查询保存的数据库中的值并将其作为相应的选项显示在模板中。

forms.py

OPTIONS = (
    ('1', 'Today'),
    ('2', 'This Week'),
    ('3', 'This Month'),
    ('4', 'This Year'),
    ('5', 'All'),
 )

class ReporForm(forms.ModelForm):
    optons = forms.ChoiceField(widget=forms.Select(), choices=OPTIONS,required=False, initial=0)

模板

{{ reportform.as_p}}

这里,如果用户选择“本周”作为他们的选项,那么在数据库中“本周”“2”的值将被保存。

通常,如果我从表中查询数据,它会将值呈现为“2”。但我希望它在模板中显示“本周”。我没有看到任何这样的教程或博客。

我不知道如何在 Django 中做到这一点。

【问题讨论】:

  • 能否请您也出示一下您的模板?
  • @Ghyllebert,更新了有问题的模板,该模板不起作用

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


【解决方案1】:

为了在 django 中检索字典的值,可以使用以下语法:

ReporForm.get_optons_display()

例如,如果您想检查数据库查询是“全部”还是键“5”,您可以简单地执行以下操作:

if ReporForm.get_optons_display() == 'ALL':
    #do something

Django Docs

示例摘录:

Views.py

    #Query your database to retrieve your instance of 'ReporForm'
    #I will assume there is a primary key of some type (Reportcode)
    foo = ReporForm.objects.get(ReportCode = 1234)

#Pass foo to the context
context = {'foo':foo}
#Send this context to your render_to_response so it goes to template

reportform.html

<b>You have selected the option :</b> '{{ foo.get_optons_display }}'

【讨论】:

  • 就像@JcKelley 说的,如果你想显示“本周”,用户get_optons_display(),django 会为你生成这个方法。见here
  • @JcKelley,在模板中如何渲染值,你能告诉我如何实现吗,我不明白如何实现。
  • @MonkL,您将使用相同的函数 get_field_display()。因此,使用您传递的“ReporForm”实例,您只需执行 {{ ReporForm.get_optons_display }} 即可显示“本周”或您的字典值。
  • @JcKelley,很抱歉再次问你,在views.py中我应该为此写一个方法。如果你有任何示例,请分享。