我有问题。我有一个看起来像“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只显示包含所有字符串变量的记录。
抱歉我的英语不好,希望大家都明白。 欢呼声。
答案 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")