picomon picomon - 1 month ago 8
Python Question

Search through multiple fields in Django

I'm trying to build a search system, and I want to search by multiple fields

name, state, city,
in my django models. I wrote the below code, yet I've been unable to figure out how to go about it.

Models:

class Finhall(models.Model):
user=models.ForeignKey(User)
name=models.CharField(max_length=250, unique=True)
address=models.CharField(max_length=200)
city=models.CharField(max_length=200)
state=models.CharField(max_length=200)

def __unicode__(self):
return u'%s' % (self.name)


Views.py

def hup_find(request):
if ('q' in request.GET) and request.GET['q'].strip():
query_string=request.GET.get('q')
seens=Finhall.objects.filter(name__icontains=query_string)
else:
seens=None
return render_to_response('find.html',{'seens':seens},context_instance=RequestContext(request))


Template:

{% block content %}
<body>
<form action="" method="GET">
<input type="text" name="q" />
<button type="submit">search</button>
</form>


{% for seen in seens %}

<p> {{seen.name}}</p>

{% empty %}

<p> no search </p>
{% endfor %}

</body>

{% endblock %}


How can I go about this? I don't want to use haysatck due to some personal reasons.

Answer

you can use django Q objects to do OR query,

or if you want to ANDyour queries together just use the current lookups as kwargs

seens=Finhall.objects.filter(name__icontains=query_string, address__icontains=query_string)

You should really consider full text search or haystack (which makes search easy) because icontains issues a %LIKE% which is not remotely scalable

Comments