【问题标题】:Django: Values_list returns id from choice field instead of nameDjango:Values_list 从选择字段返回 id 而不是名称
【发布时间】:2015-12-03 20:04:21
【问题描述】:

我有两个模型

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 的对象(查询集)列表。(或者为了简单起见,假设我有一个第二个模型的对象)

现在我做反向过滤

Model2_obj.rel_model2.all()

或者(就我而言)

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

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

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

我可以通过迭代 id 列表和choice_list 来做到这一点,但我们可以用单一的 ORM 查询/Pythonic 方式/高效方式吗?

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    如果您选择使用 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”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-27
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多