Какой-то другой фильтр - PullRequest
       4

Какой-то другой фильтр

0 голосов
/ 18 декабря 2009

У меня проблема. У меня есть строка, которая выглядит как «var1, var2», а таблица в базе данных, которая содержит некоторые записи, выглядит как «var1, var3», «var3», «var2, var3», и я хочу отфильтровать их, разделив первую строку. Когда любая из моих строковых переменных подходит для переменных базы данных, django отобразит их. Таким образом, когда у меня есть строка-var, как это: «var1, var2» и переменные базы данных, такие как: «var1, var3», «var3», «var2, var3» django будет отображать «var1, var3», «var2, var3» ». Как я могу это сделать? Когда я выполняю прямую фильтрацию по Data.objects.filter, Django отображает только те записи, которые содержат все строковые переменные.

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

Ответы [ 2 ]

2 голосов
/ 19 декабря 2009

Я думаю, что вы хотите ИЛИ поиски. Попробуйте это:

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

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

0 голосов
/ 18 декабря 2009

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

Итак, вместо этого:

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...