我正在使用 postgresql 数据库,它允许拥有数组数据类型,此外 django 为此提供了 PostgreSQL 特定的模型字段。 我的问题是如何根据数组的最后一个元素过滤对象?
class Example(models.Model):
tags = ArrayField(models.CharField(...))
example = Example.objects.create(tags=['tag1', 'tag2', 'tag3']
example_tag3 = Example.objects.filter(tags__2='tag3')
我想过滤但不知道标签的大小是多少。是否有任何动态过滤类似:
example_tag3 = Example.objects.filter(tags__last='tag3')
添加上述答案和评论,如果无法更改表结构,您可以使用 field__0
:
根据数组中的first 元素过滤查询
example_tag3 = Example.objects.filter(tags__0='tag1')
但是,我在文档中没有看到直接访问最后一个元素的方法。
ArrayField
转为仅包含列表的
JSONField
。然后你可以这样过滤:
class Post(models.Model):
tags = models.JSONField()
first_tag = Post.objects.filter(tags__0="python")
last_tag = Post.objects.filter(**{"tags__-1": "java"})
请注意,使用 -1 语法时需要进行字典解包以避免语法错误。