Bol*_*wyn 5 django field filter django-models
假设一个模型
class Foo(models.Model):
bar = models.CommaSeparatedIntegerField('Filter Me!')
Run Code Online (Sandbox Code Playgroud)
bar例如,内容可能看起来像12,35,67,142.
我想查询所有Foo的时候,那些有42在bar:
all_42_foos = Foo.objects.filter(bar__contains="42")
Run Code Online (Sandbox Code Playgroud)
因为CommaSeparatedIntegerField继承自CharField,并且过滤器评估使用字段的字符串内容(也与上面的示例匹配),因此不会给出正确的结果142.
我怎么能有一个过滤器,它在检查之前.split(",")在bar现场做了42?我真的不想bar成为一个ManyToMany,因为它是一个可怕的开销.
des*_*ido 13
怎么样的:
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') )
Run Code Online (Sandbox Code Playgroud)
虽然这是一个冗长的查询,我认为沿着这些方向的东西将是获得你正在寻找的东西的唯一方法.可能值得把它变成一个单独的功能
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) )
Run Code Online (Sandbox Code Playgroud)
出于好奇,您是否已经使用多对多方式检查应用程序的实际性能,以及您描述的伪多对多方法?
| 归档时间: |
|
| 查看次数: |
3718 次 |
| 最近记录: |