How can I make Django search in multiple fields using QuerySets and MySql "Full Text Search"? -



How can I make Django search in multiple fields using QuerySets and MySql "Full Text Search"? -

i'm django novice, trying create "search" form project using mysql myisam engine. far, manage form work, django doesn't seem search fields same way. results random. exemple: search in region returns no result or worst search in description works fine while howtogetin doesn't seem apply..

here model:

class camp(models.model): owner = models.onetoonefield(user) name = models.charfield(max_length=100) description = models.textfield() address1 = models.charfield(max_length=128) address2 = models.charfield(max_length=128) zipcode = models.charfield(max_length=128) part = models.charfield(max_length=128) country = models.charfield(max_length=128) phone = models.charfield(max_length=60) howtogetin = models.textfield() def __str__(self): homecoming self.name

here view:

def campsearch(request): if request.method == 'post': form = campsearchform(request.post) if form.is_valid(): terms = form.cleaned_data['search'] camps = camp.objects.filter( q(name__search=terms)| q(description__search=terms)| q(address1__search=terms)| q(address2__search=terms)| q(zipcode__search=terms)| q(region__search=terms)| q(country__search=terms)| q(howtogetin__search=terms) ) homecoming render(request, 'campsearch.html', {'form':form, 'camps':camps}) else: form = campsearchform() homecoming render(request, 'campsearch.html', {'form':form})

any clue?

i'd recommend implement this:

#views.py def normalize_query(query_string, findterms=re.compile(r'"([^"]+)"|(\s+)').findall, normspace=re.compile(r'\s{2,}').sub): ''' splits query string in invidual keywords, getting rid of unecessary spaces , grouping quoted words together. example: >>> normalize_query(' random words "with quotes " , spaces') ['some', 'random', 'words', 'with quotes', 'and', 'spaces'] ''' homecoming [normspace('',(t[0] or t[1]).strip()) t in findterms(query_string)] def get_query(query_string, search_fields): ''' returns query, combination of q objects. combination aims search keywords within model testing given search fields. ''' query = none # query search every search term terms = normalize_query(query_string) term in terms: or_query = none # query search given term in each field field_name in search_fields: q = q(**{"%s__icontains" % field_name: term}) if or_query none: or_query = q else: or_query = or_query | q if query none: query = or_query else: query = query & or_query homecoming query

and each search

#views.py def search_for_something(request): query_string = '' found_entries = none if ('q' in request.get) , request.get['q'].strip(): query_string = request.get['q'] entry_query = get_query(query_string, ['field1', 'field2', 'field3']) found_entries = model.objects.filter(entry_query).order_by('-something') homecoming render_to_response('app/template-result.html', { 'query_string': query_string, 'found_entries': found_entries }, context_instance=requestcontext(request) )

and in template

#template.html <form class="" method="get" action="{% url 'search_for_something' model.pk %}"> <input name="q" id="id_q" type="text" class="form-control" placeholder="search" /> <button type="submit">search</button> </form> #template-result.html {% if found_entries %} {% field in found_entries %} {{ model.field }} {% endfor %} {% endif %}

and url

#urls.py url(r'^results/$', 'app.views.search_for_something', name='search_for_something'),

mysql django python-2.7 full-text-search django-queryset

Comments

Popular posts from this blog

xslt - DocBook 5 to PDF transform failing with error: "fo:flow" is missing child elements. Required content model: marker* -

mediawiki - How do I insert tables inside infoboxes on Wikia pages? -

Local Service User Logged into Windows -