2009-12-18 140 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 

你可能想把它放在管理器的可重用性。但個人而言,我試圖找出爲什麼名稱存儲在數據庫上並修復它。

相關問題