2009-12-18 98 views
0

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

对不起,我的英文很差,希望大家理解。 干杯。

回答

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") 
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 

你可能想把它放在管理器的可重用性。但个人而言,我试图找出为什么名称存储在数据库上并修复它。

相关问题