你能帮我用 postgres 为以下标准编写完美的 django ORM 查询吗?
Can you help me write the perfect ORM query for django with postgres for the following criteria?
所以我有这样的模型,
class AlphabetArray(models.Model):
slug = ArrayField(
models.CharField(max_length=50, blank=True),
null=True,default=list)
在字段 slug
中,我们可能有类似 ['a','b','c',.....'z']
的值 是否可以查询此模型,这样,
我得到的 slugs 对象只包含至少一个或两个列表 ['d','e']
而不是任何其他字母表?
所以我正在查询具有 'd'
、'e'
或同时具有 'd'
和 'e'
而不是任何其他字母表的对象?
您需要检查 2 个重叠:
- 目标数组与数组重叠['d','e']
- 目标数组不重叠数组['a','b','c','f' ... 'z']
以下在SQL中完成,因为我不会django,你将不得不修改它。您在决赛中不需要 CTE 和 select_it,但它们对测试很有用。
-- setup test cases
with test_array_sets (test_array,select_it) as
( values (array['d','e'],'Yes')
, (array['d','e','f'],'No')
, (array[]::text[],'No')
, (array['x','y','z'],'No')
, (array['d'],'Yes')
, (array['e'],'Yes')
)
-- actual query needed,
select target_array, select_it
from test_array_sets
where not target_array && array['a','b','c','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
and target_array && array['d','e'] ;
任何寻找此问题答案的人,
alphabets = AlphabetArray.objects.filter( Q ( slug__contained_by=['d','e'] ) | Q ( slug__len__gte=1)
所以我有这样的模型,
class AlphabetArray(models.Model):
slug = ArrayField(
models.CharField(max_length=50, blank=True),
null=True,default=list)
在字段 slug
中,我们可能有类似 ['a','b','c',.....'z']
的值 是否可以查询此模型,这样,
我得到的 slugs 对象只包含至少一个或两个列表 ['d','e']
而不是任何其他字母表?
所以我正在查询具有 'd'
、'e'
或同时具有 'd'
和 'e'
而不是任何其他字母表的对象?
您需要检查 2 个重叠:
- 目标数组与数组重叠['d','e']
- 目标数组不重叠数组['a','b','c','f' ... 'z']
以下在SQL中完成,因为我不会django,你将不得不修改它。您在决赛中不需要 CTE 和 select_it,但它们对测试很有用。
-- setup test cases
with test_array_sets (test_array,select_it) as
( values (array['d','e'],'Yes')
, (array['d','e','f'],'No')
, (array[]::text[],'No')
, (array['x','y','z'],'No')
, (array['d'],'Yes')
, (array['e'],'Yes')
)
-- actual query needed,
select target_array, select_it
from test_array_sets
where not target_array && array['a','b','c','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
and target_array && array['d','e'] ;
任何寻找此问题答案的人,
alphabets = AlphabetArray.objects.filter( Q ( slug__contained_by=['d','e'] ) | Q ( slug__len__gte=1)