Django:Values_list从选择字段而不是名称返回id

时间:2015-09-08 08:19:46

标签: django django-models django-orm

我有两个型号

class Model1:
   my_Choices = ((1, val1), (2, val2))

   field1 = choice_field(my_Choices)
   field2 = charfield

和另一个具有ManyToMany字段的模型

class Model2:
    field1 = ManytoMany(Model1, related_name='rel_model2')
    field2 = Charfield

现在我有一个Model2的对象列表(queryset)。(或者为了简单起见假设我有第二个模型的对象)

现在我做反向过滤

Model2_obj.rel_model2.all()

或(在我的情况下)

Model2_obj.rel_model2.values_list('field1', flat=True)

这将返回Model1中可用选项的ID列表(对吗?) 例如[1L, 2L]

相反,如果我想要名字/值(我的意思是选择中的值列表) 例如 ['val1', 'val2']

我可以通过迭代id list和choice_list来实现这一点,但我们可以用单个ORM查询/ Pythonic方式/有效方式吗?

1 个答案:

答案 0 :(得分:0)

如果您选择使用values_list()函数,那么您必须自己进行查找/转换。 (那是因为Django将数字存储在数据库中,而不是字符串,而values_list()表示"得到我在数据库中的内容"。)执行查找并不难 - 你可以创建一个dictonary as

my_choices_dict = dict(my_choices)

并使用它。

或者,如果获得完整对象,则可以使用模型类中内置的get_field1_display()方法。请参阅https://docs.djangoproject.com/en/1.8/topics/db/models/并搜索" get_FOO_display"