QuerySet过滤器ArrayField包含完全匹配

时间:2018-04-18 17:25:52

标签: django django-queryset

我有一个通常看起来像这样的模型:

class CategoryModel(models.Model):
    categories = ArrayField(..)

我们说我有两个类别," categoryA"和" categoryB"

categoryA' categories等于[123, 562],并且 categoryB' categories等于[5, 32]

如果我想查询CategoryModel5作为categories列表中的项目,我会使用CategoryModel.objects.filter(categories__icontain=5)

不幸的是,上述查询同时返回categoryAcategoryB只返回categoryB。 执行此查询的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用iexact

CategoryModel.objects.filter(categories__1__iexact=5)

此处1与第一个元素匹配。

来自docs

from django.db import models
from django.contrib.postgres.fields import ArrayField

class Post(models.Model):
    name = models.CharField(max_length=200)
    tags = ArrayField(models.CharField(max_length=200), blank=True)

    def __str__(self):
        return self.name

Index transforms

>>> Post.objects.create(name='First post', tags=['thoughts', 'django'])
>>> Post.objects.create(name='Second post', tags=['thoughts'])

>>> Post.objects.filter(tags__0='thoughts')
<QuerySet [<Post: First post>, <Post: Second post>]>

>>> Post.objects.filter(tags__1__iexact='Django')
<QuerySet [<Post: First post>]>

>>> Post.objects.filter(tags__276='javascript')
<QuerySet []>