Reputation: 1
I have a problem. I've got a string which looks like "var1,var2" and table in database which contains some records looks like "var1, var3", "var3", "var2,var3" an I want to filter them by splitting first string. When any of my string-variable fits to database-variable django will display them. So, when I have string-var like this:"var1,var2" and database-variables like: "var1,var3", "var3", "var2,var3" django will display "var1,var3", "var2,var3". How can I do that? When I straightly filter by Data.objects.filter, Django displays only that records who contains all of string-variables.
Sorry for my poor English, hope everyone understood. Cheers.
Upvotes: 0
Views: 91
Reputation: 3160
I htink that what you want is OR lookups. Try this:
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
You might want to put this in a Manager for reusability. But personally, I'd try to find out why are names stored like that on the database and fix that.
Upvotes: 2
Reputation: 46423
Rather than this approach, you might have better luck adding a foreign key or a grouping number to your model so you can use the Database to do the splitting for you.
So instead of this:
class MyModel(models.Model):
vars = models.CharField(max_length=200)
m = MyModel(vars="var1,var2")
m.save()
m = MyModel(vars="var2,var3")
m.save()
Do this:
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()
Then you can query like this:
MyModel.objects.filter(group=1)
Or like this:
MyModel.objects.filter(var="var1")
Upvotes: 0