【发布时间】:2018-07-13 18:18:15
【问题描述】:
在 Django ORM 中,有什么方法可以直接获取相应的选择值而不是生成的查询集中的字段值。
示例:
port = models.CharField(
max_length=5,
choices=( ('21', 'FTP'), ('22', 'SSH'), (...), .. )
)
在 ORM 查询之后,我需要 Queryset 本身中的端口名称(而不是数字)。
查询:
> myModel.objects.filter(...).values()
输出:
> [{"id": 1, "port": "21"}, {"id": 2, "port": "22"}, {...}, ...]
我想要什么:
> [{"id": 1, "port": "FTP"}, {"id": 2, "port": "SSH"}, {...}, ...]
【问题讨论】:
-
您能否发布您尝试进行的完整查询,然后指定预期结果以及您得到的结果。如果您显示 FULL 模型,它也会有所帮助。谢谢。
-
你为什么在这里使用
values()?获取 myModel 对象并在每个对象上调用get_port_display()。 -
我知道,我可以轻松获取对象并对其进行循环或通过函数传递它。但我的问题是我需要结果查询集本身中的选择映射,无论是否使用
values()。我只需要查询集有我的选择映射而不是存储的字段值。 -
由于显示值未存储在 db 中并且 get_
_display() 是一个实例函数,我能想到的唯一选择是注释标签并在 for 循环中分配选择显示值.
标签: python django orm django-orm