Commit 8af30ade authored by Serge S. Koval's avatar Serge S. Koval

Added search functionality

parent 33cd4b94
...@@ -61,6 +61,8 @@ class TweetView(ModelView): ...@@ -61,6 +61,8 @@ class TweetView(ModelView):
filters.FilterLike('name', 'Name'), filters.FilterLike('name', 'Name'),
filters.FilterNotLike('name', 'Name')) filters.FilterNotLike('name', 'Name'))
searchable_columns = ('name', 'text')
form = TweetForm form = TweetForm
def get_list(self, *args, **kwargs): def get_list(self, *args, **kwargs):
......
...@@ -11,6 +11,7 @@ from flask.ext.admin.model import BaseModelView ...@@ -11,6 +11,7 @@ from flask.ext.admin.model import BaseModelView
from flask.ext.admin.actions import action from flask.ext.admin.actions import action
from .filters import BasePyMongoFilter from .filters import BasePyMongoFilter
from .tools import parse_like_term
class ModelView(BaseModelView): class ModelView(BaseModelView):
...@@ -175,7 +176,40 @@ class ModelView(BaseModelView): ...@@ -175,7 +176,40 @@ class ModelView(BaseModelView):
else: else:
query['$AND'] = data query['$AND'] = data
# TODO: Search # Search
if self._search_supported and search:
values = search.split(' ')
queries = []
# Construct inner querie
for value in values:
if not value:
continue
regex = parse_like_term(value)
stmt = []
for field in self._search_fields:
stmt.append({field: {'$regex': regex}})
if stmt:
if len(stmt) == 1:
queries.append(stmt[0])
else:
queries.append({'$or': stmt})
# Construct final query
if queries:
if len(queries) == 1:
final = queries[0]
else:
final = {'$and': queries}
if query:
query = {'$and': [query, final]}
else:
query = final
# Get count # Get count
count = self.coll.find(query).count() count = self.coll.find(query).count()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment