其他一些过滤器

时间:2009-12-18 19:07:46

标签: python django

我有问题。我有一个看起来像“var1,var2”的字符串和数据库中的表,其中包含一些看起来像“var1,var3”,“var3”,“var2,var3”的记录,我想通过拆分第一个字符串来过滤它们。当我的任何字符串变量适合数据库变量django时,它将显示它们。所以,当我有这样的string-var:“var1,var2”和数据库变量如:“var1,var3”,“var3”,“var2,var3”django将显示“var1,var3”,“var2,var3 ”。 我怎样才能做到这一点?当我通过Data.objects.filter直接过滤时,Django只显示包含所有字符串变量的记录。

抱歉我的英语不好,希望大家都明白。 欢呼声。

2 个答案:

答案 0 :(得分:2)

我想你想要的是OR查找。试试这个:

var_string = 'var1,var2'
vars = var_string.split(',')

result = MyModel.objects.none()

for var in vars:
  result |= MyModel.objects.filter(name__icontains=var.strip())

return result

您可能希望将其放入Manager以获得可重用性。但就个人而言,我试图找出为什么这些名称在数据库中存储起来并修复它。

答案 1 :(得分:0)

除了这种方法,您可以更好地为模型添加外键或分组编号,以便您可以使用数据库为您进行拆分。

所以不要这样:

class MyModel(models.Model): 
    vars = models.CharField(max_length=200)

m = MyModel(vars="var1,var2")
m.save()
m = MyModel(vars="var2,var3")
m.save()

这样做:

class MyModel(models.Model):
    group = models.IntegerField()
    var = models.CharField(max_length=200)

m = MyModel(group=1, var="var1")
m.save()
m = MyModel(group=1, var="var2")
m.save()

m = MyModel(group=2, var="var2")
m.save()
m = MyModel(group=2, var="var3")
m.save()

然后你可以像这样查询:

MyModel.objects.filter(group=1)

或者像这样:

MyModel.objects.filter(var="var1")