Django:显示选择值

Posted

技术标签:

【中文标题】Django:显示选择值【英文标题】:Django: Display Choice Value 【发布时间】:2011-05-18 06:24:31 【问题描述】:

models.py:

class Person(models.Model):
    name = models.CharField(max_length=200)
    CATEGORY_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(max_length=200, choices=CATEGORY_CHOICES)
    to_be_listed = models.BooleanField(default=True)
    description = models.CharField(max_length=20000, blank=True)

views.py:

def index(request):
    latest_person_list2 = Person.objects.filter(to_be_listed=True)
    return object_list(request, template_name='polls/schol.html',
                       queryset=latest_person_list, paginate_by=5)

在模板上,当我调用person.gender 时,我得到'M''F' 而不是'Male''Female'

如何显示值('Male''Female')而不是代码('M'/'F')?

【问题讨论】:

Django print choices value 的可能重复项 我试过这个方法,在我使用的模板中: % for person in object_list % some html person.get_gender_display() html % endfor % 我得到以下错误:异常值:无法解析余数:来自“person.get_gender_display()”的“()” 我的错,我不应该在 person.get_gender_display 之后包含 '()'。它现在工作。谢谢。 只是一点点评论,因为性别只会是 M 或 F(1 个字符长度),因此将字符字段的最大长度设置为 200 是没有意义的。使用max_lenght=1 就足够了,这将使您的网站更加高效,并确保您不会有错误的数据。 :) Django templates: verbose version of a choice的可能重复 【参考方案1】:

看起来你走在了正确的轨道上 - get_FOO_display() 肯定是你想要的:

模板中,您不能在方法名称中包含()。执行以下操作:

 person.get_gender_display 

【讨论】:

这种方法是无价的。但是除了使用该方法之外,还有什么方法可以检索存储在 i.item.what_to_put_here 中的值? 请注意,对于使用 Jinja2 作为其模板的任何人,您都应该包含括号。 person.get_gender_display() 加分:如果您通过 JSON 发送信息(例如在分页场景中),最好的方法是什么?理想情况下,无需一一实例化模型和调用 get_field_display() 的开销。 要爱上 Django,差不多 10 年后,答案仍然有效! Thx +1 和我喝酒。 不知何故这不会获取翻译后的文本。如果网站上已经实现了 i18,关于如何获取翻译文本的任何想法?【参考方案2】:

对于每个设置了选项的字段,对象将有一个 get_FOO_display() 方法,其中 FOO 是字段的名称。此方法返回字段的“人类可读”值。

在视图中

person = Person.objects.filter(to_be_listed=True)
context['gender'] = person.get_gender_display()

在模板中

 person.get_gender_display 

Documentation of get_FOO_display()

【讨论】:

【参考方案3】:

其他人指出 get_FOO_display 方法是您所需要的。 我正在使用这个:

def get_type(self):
    return [i[1] for i in Item._meta.get_field('type').choices if i[0] == self.type][0]

遍历特定项目的所有选项,直到找到与项目类型匹配的选项

【讨论】:

以上是关于Django:显示选择值的主要内容,如果未能解决你的问题,请参考以下文章

Django - 选择字段显示键,而不是值

基于下拉值选择显示Django ModelForm中的链接

如果在下拉列表中选择了特定值,则 Django 管理员显示/隐藏字段

Django 模板:使用 get_FOO_display() 强制选择字段并打印显示值

Django Admin显示/隐藏字段如果在下拉菜单中选择了特定值

Django 查询返回空白值