我有两个型号
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方式/有效方式吗?
答案 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"