Python将UUID对象更改为字符串表示列表

时间:2015-10-27 10:30:21

标签: python

检索具有values_list PK的查询集时,类型为UUIDField Django为您提供了UUIDField对象列表,而不是字符串UUID列表。

例如,以下内容为我提供了一个查询集:

items = Item.objects.values_list('id', flat=True).filter()

print(items)的输出为:

[UUID('00c8aa9e-2f61-4bac-320c-ab26b8fb1de9')]

但我希望该列表是UUID的字符串表示,即

 ['00c8aa9e-2f61-4bac-320c-ab26b8fb1de9']

我可以在循环中对每个对象进行此操作,但我想更改整个查询集。这可能吗?

我试过了:

print(str(items))

2 个答案:

答案 0 :(得分:2)

您有一个要转换为字符串列表的对象列表:

items = [str(o) for o in items]

实现转型的唯一方法是处理每个项目。

print(str(items))没有做你想做的事情的原因是将列表对象转换为字符串(无论如何print()执行)而不是列表中的每个对象。

答案 1 :(得分:1)

您可以使用数据库以Django特定的方式解决此问题,而不是将解决方案带入内存。

Django现在具有Cast函数,可以从django.db.model.functions导入该函数。

然后可以在查询中使用它:

from django.db.models import TextField
from django.db.models.functions import Cast


items = Item.objects.annotate(str_id=Cast('id', output_field=TextField())).values_list('str_id', flat=True)