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

Pro*_*eus 4 python

当检索带有values_listPK 的查询集时,UUIDFieldDjango 会为您提供 UUIDField 对象列表而不是字符串 UUID 列表。

例如,以下给了我一个查询集:

items = Item.objects.values_list('id', flat=True).filter()
Run Code Online (Sandbox Code Playgroud)

其中的输出print(items)是:

[UUID('00c8aa9e-2f61-4bac-320c-ab26b8fb1de9')]
Run Code Online (Sandbox Code Playgroud)

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

 ['00c8aa9e-2f61-4bac-320c-ab26b8fb1de9']
Run Code Online (Sandbox Code Playgroud)

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

我试过了:

print(str(items))
Run Code Online (Sandbox Code Playgroud)

小智 13

您可以使用数据库以 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)
Run Code Online (Sandbox Code Playgroud)


dsh*_*dsh 6

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

items = [str(o) for o in items]
Run Code Online (Sandbox Code Playgroud)

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

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