2015-09-08 36 views
0

返回ID我有两个型号Django的:Values_list从选择字段,而不是名

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

    field1 = choice_field(my_Choices) 
    field2 = charfield 

,并具有多对多场

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

现在,另一种模式我有对象(查询集)的列表Model2。(或者为了简单起见,我假设我有第二个模型的对象)

现在我做反向过滤

Model2_obj.rel_model2.all() 

或者(在我的情况)

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

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

而是如果这个我想要名称/值(我指的是来自选项的值列表) 例如, ['val1', 'val2']

我可以通过遍历id列表和choice_list来做到这一点,但我们可以在一个单一的ORM查询/ Pythonic方式/有效的方式吗?

回答

0

如果您选择使用values_list()函数,那么您必须自己执行查找/转换。 (这是因为Django将数字存储在数据库中,而不是字符串,而values_list()则表示“让我知道数据库中的内容”。)查找并不困难 - 您可以创建一个字符串作为

my_choices_dict = dict(my_choices) 

并使用它。另外,如果你得到完整的对象,你可以使用内建在你的模型类中的get_field1_display()方法。请参阅https://docs.djangoproject.com/en/1.8/topics/db/models/并搜索“get_FOO_display”

相关问题