Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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
Django QuerySet筛选器数组字段包含精确匹配_Django_Django Queryset - Fatal编程技术网

Django QuerySet筛选器数组字段包含精确匹配

Django QuerySet筛选器数组字段包含精确匹配,django,django-queryset,Django,Django Queryset,我有一个模型,通常看起来像这样: class CategoryModel(models.Model): categories = ArrayField(..) 假设我有两个类别,“categoryA”和“categoryB” 类别的类别等于[123562],并且 类别b的类别等于[5,32] 当我想查询CategoryModels时,我使用CategoryModel.objects.filter(categories\uu icontain=5) 不幸的是,上面的查询同时返回categ

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

class CategoryModel(models.Model):
    categories = ArrayField(..)
假设我有两个类别,“
categoryA
”和“
categoryB

类别
类别
等于
[123562]
,并且
类别b
类别
等于
[5,32]

当我想查询
CategoryModel
s时,我使用
CategoryModel.objects.filter(categories\uu icontain=5)

不幸的是,上面的查询同时返回
categoryA
categoryB
不是只是
categoryB

执行此查询的正确方法是什么?

您可以使用
iexact

CategoryModel.objects.filter(categories__1__iexact=5)
此处
1
与第一个元素完全匹配


发件人:

>>Post.objects.create(name='First Post',tags=['thinks','django'])
>>>创建(name='Second Post',tags=['thinks'])
>>>Post.objects.filter(标记\uuu 0='thinks')
>>>Post.objects.filter(标记\uuu1\uuuiExact='Django')
>>>Post.objects.filter(标记\uuu 276='javascript')

仍在获取类型错误:
类别“[2]::text)=上限(79)[…]
;”提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。“我认为这与int->str?@MichaelWard使用5作为字符串'5'有关。谢谢!我接受了你的答案——我无意中使用了一个包装器,它在调用函数之前将我的数据转换为整数:)起初,我认为Django在幕后做了一些不必要的魔术
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
>>> 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 []>