Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Django将uuid过滤为文本?_Python_Django - Fatal编程技术网

Python 如何使用Django将uuid过滤为文本?

Python 如何使用Django将uuid过滤为文本?,python,django,Python,Django,如何使用Django将uuid过滤为文本? 例如,我想做下面的事情 class Group(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 在本例中,我收到了django.core.exceptions.FieldError:相关字段得到了无效的查找:startswith 我需要使用额外的吗?正如我在评论中所说,(至少不是以你想要的方式)。另一种选择(虽

如何使用Django将uuid过滤为文本?
例如,我想做下面的事情

class Group(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
在本例中,我收到了
django.core.exceptions.FieldError:相关字段得到了无效的查找:startswith


我需要使用额外的吗?

正如我在评论中所说,(至少不是以你想要的方式)。另一种选择(虽然可能不是最有效的)是在模型中包含UUID的字符串表示形式的属性或

class Cast(Func):
    function = "CAST"
    template = "%(function)s(%(expressions)s AS varchar)"

Group.objects.annotate(sid=Cast(id)).filter(sid__startswith='000')

可能是这样的?

我假设
id
是一个
UUIDField
,但是请在这里添加您的模型(以及任何其他相关代码),这样我们就可以确定并给出准确的答案:)@LucaBezerra谢谢,您是对的
id
是一个
UUIDField
。我添加了一些行。你能试试
\uu icontains
而不是
\uu startswith
,只是为了检查一下吗?我知道它没有你想要的那种行为,但我只是想看看它是否有效。有些地方说,
UUID
不可搜索。其他地方说,Postgres处理uuid字段的方式与其他数据库不同——显然,它存储uuid时没有破折号。出于好奇,你为什么要这样做?以
000
开头的UUID的意义是什么?@LucaBezerra-查询UUID的唯一方法是将其转换为字符串。请记住,强制转换将意味着列上的任何索引都将被忽略,并将被顺序扫描。事实是,任何建议都将是不正确的。如果OP需要通配符搜索这些值,它们应该将其转换为文本,然后插入uuid的字符串表示,而不是default=uuid.uuid4。然后索引将以零功能损失的方式工作。唯一的区别是大小-UUID是16字节的128位数据类型,而文本有开销,因此UUID的最小长度为33字节。@Trent我的知识不允许我说绝对没有“非黑客”的方法来做到这一点,但我同意你关于我能想到的唯一选项的看法。
class Cast(Func):
    function = "CAST"
    template = "%(function)s(%(expressions)s AS varchar)"

Group.objects.annotate(sid=Cast(id)).filter(sid__startswith='000')