我有一个通常看起来像这样的模型:
class CategoryModel(models.Model):
categories = ArrayField(..)
我们说我有两个类别," categoryA
"和" categoryB
"
categoryA
' categories
等于[123, 562]
,并且
categoryB
' categories
等于[5, 32]
如果我想查询CategoryModel
个5
作为categories
列表中的项目,我会使用CategoryModel.objects.filter(categories__icontain=5)
不幸的是,上述查询同时返回categoryA
和categoryB
,不只返回categoryB
。
执行此查询的正确方法是什么?
答案 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
>>> 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 []>