如何让 Django values_list 显示覆盖的 return 值而不是实际值?

How do I get Django values_list to return value of display override and not the actual value?

我注意到当调用 values()values_list() 一个查询集时 returns 字段中的正常值而不是我想要的显示值。有没有办法在创建作为查询集列表列表的结果时操纵字段的显示值?

class FooBar(models.Model):
    ...
    foo_bar = models.CharField(_("foo"),  choices=[(1, 'foo'), (2, 'bar')])

    def get_foo_bar_display(self):
        return "something"

def get_foobar(user):
    foobar = FooBar.objects.filter(user=user).values_list(.., 'foo_bar')
    foobar = list(map(list, foobar))
    return foobar

它总是 returns foo_bar 原始值而不是显示值。

您的一个解决方法是使用 .only() 查询集方法获取仅包含某些选定字段(get_x_display 正常工作所需的字段)的模型实例。

从那里开始,您可以像往常一样在模型上调用 get_x_display