Django在使用.values时获得选择显示

时间:2019-04-27 08:58:47

标签: django model choicefield

对于具有字段Model的{​​{1}},是否可以使用type获取选择显示值?我尝试了Model.objects.values(),但没有用。

2 个答案:

答案 0 :(得分:2)

您不能那样做。 values是内置的django queryset方法,用于获取数据字典,而不是模型实例,您可以详细了解here

将选择项附加到字段模型的常规(正确的方法)是使用像这样的静态变量。

class MyModel(models.Model):
    TYPE_CHOICES = (
        # (<DB VALUE>, <DISPLAY_VALUE>)
        ('a', 'Choice A'),
        ('b', 'Choice B'),
    )

    type = models.CharField(max_length=1, choices=TYPE_CHOICES)

您可以像这样在模型外部访问类型字段的选择。

MyModel.TYPE_CHOICES

答案 1 :(得分:0)

在我将选择字段的.values调用到查询集中的情况下,我通过以下方式进行处理:

假设以下模型

from enum import Enum

class TypeChoice(Enum):
    a = 'class A'
    b = 'class B'

class MyModel(models.Model):
    type = models.CharField(max_length=1, choices=[(tag.name,tag.value) for tag in TypeChoice])

使用查询my_qset = MyModel.objects.values('type'),显示值可作为:

for item in my_qset:
     print(TypeChoice[item].value)

要在模板中处理此问题,我写了一个自定义模板过滤器,说type_display

from django import template
import TypeChoice
register = template.Library()

@register.filter
def type_display(var):
    return TypeChoice[var].value