当使用 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))
最佳答案
您可以使用数据库以 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)
关于Python 将 UUID 对象更改为字符串表示列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33365495/