gpt4 book ai didi

django - 如何过滤Django的CommaSeparatedIntegerField

转载 作者:行者123 更新时间:2023-12-02 11:18:46 24 4
gpt4 key购买 nike

假设一个模型

class Foo(models.Model):
bar = models.CommaSeparatedIntegerField('Filter Me!')

的内容可能类似于12,35,67,142

我想查询 bar 中具有 42 的所有 Foo:

all_42_foos = Foo.objects.filter(bar__contains="42")

这不会给出正确的结果,因为 CommaSeparatedIntegerField 继承自 CharField 并且过滤器评估使用字段的字符串内容(将上面的示例与 142,也是)。

如何拥有一个过滤器,在检查 42 之前在 bar 字段上执行 .split(",") >?我真的不希望 bar 成为 ManyToMany,因为这会是一个可怕的开销。

最佳答案

像这样的东西怎么样:

from django.db.models import Q

all_42_foos = Foo.objects.filter( Q(bar__startswith='42,') | Q(bar__endswith=',42') | Q(bar__contains=',42,') | Q(bar__exact='42') )

虽然这是一个有点冗长的查询,但我认为沿着这些思路的东西将是获得您正在寻找的内容的唯一方法。可能值得将其转变为一个单独的函数,类似于

def all_x_foos(x):
return Foo.objects.filter( Q(bar__startswith=x+',') | Q(bar__endswith=','+x) | Q(bar__contains=',{0},'.format(x)) | Q(bar__exact=x) )

出于好奇,您是否使用多对多方式和您描述的伪多对多方法检查了应用程序的实际性能?

关于django - 如何过滤Django的CommaSeparatedIntegerField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com