2009-12-18 3 views
0

У меня проблема. У меня есть строка, которая выглядит как «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 отображает только те записи, которые содержат все строковые переменные.Некоторые другие фильтры

Извините за плохой английский, надеюсь, что все поняли. Cheers.

ответ

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

Я htink, что вы хотите, или поисковые запросы. Попробуйте следующее:

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 

Возможно, вы захотите разместить это в Менеджере для повторного использования. Но лично я попытаюсь выяснить, почему имена хранятся в базе данных и исправляют это.

Смежные вопросы