Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
flask-admin
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Python-Dev
flask-admin
Commits
13dc0bd0
Commit
13dc0bd0
authored
Jan 27, 2015
by
Gustaf Lindqvist
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added _search method for mongoengine and pymongo backends for easier override
parent
bd2fb1a3
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
58 additions
and
50 deletions
+58
-50
view.py
flask_admin/contrib/mongoengine/view.py
+21
-18
view.py
flask_admin/contrib/pymongo/view.py
+37
-32
No files found.
flask_admin/contrib/mongoengine/view.py
View file @
13dc0bd0
...
@@ -432,6 +432,26 @@ class ModelView(BaseModelView):
...
@@ -432,6 +432,26 @@ class ModelView(BaseModelView):
"""
"""
return
self
.
model
.
objects
return
self
.
model
.
objects
def
_search
(
self
,
query
,
search_term
):
# TODO: Unfortunately, MongoEngine contains bug which
# prevents running complex Q queries and, as a result,
# Flask-Admin does not support per-word searching like
# in other backends
op
,
term
=
parse_like_term
(
search_term
)
criteria
=
None
for
field
in
self
.
_search_fields
:
flt
=
{
'
%
s__
%
s'
%
(
field
.
name
,
op
):
term
}
q
=
mongoengine
.
Q
(
**
flt
)
if
criteria
is
None
:
criteria
=
q
else
:
criteria
|=
q
return
query
.
filter
(
criteria
)
def
get_list
(
self
,
page
,
sort_column
,
sort_desc
,
search
,
filters
,
def
get_list
(
self
,
page
,
sort_column
,
sort_desc
,
search
,
filters
,
execute
=
True
):
execute
=
True
):
"""
"""
...
@@ -460,24 +480,7 @@ class ModelView(BaseModelView):
...
@@ -460,24 +480,7 @@ class ModelView(BaseModelView):
# Search
# Search
if
self
.
_search_supported
and
search
:
if
self
.
_search_supported
and
search
:
# TODO: Unfortunately, MongoEngine contains bug which
query
=
self
.
_search
(
query
,
search
)
# prevents running complex Q queries and, as a result,
# Flask-Admin does not support per-word searching like
# in other backends
op
,
term
=
parse_like_term
(
search
)
criteria
=
None
for
field
in
self
.
_search_fields
:
flt
=
{
'
%
s__
%
s'
%
(
field
.
name
,
op
):
term
}
q
=
mongoengine
.
Q
(
**
flt
)
if
criteria
is
None
:
criteria
=
q
else
:
criteria
|=
q
query
=
query
.
filter
(
criteria
)
# Get count
# Get count
count
=
query
.
count
()
count
=
query
.
count
()
...
...
flask_admin/contrib/pymongo/view.py
View file @
13dc0bd0
...
@@ -146,6 +146,42 @@ class ModelView(BaseModelView):
...
@@ -146,6 +146,42 @@ class ModelView(BaseModelView):
"""
"""
return
model
.
get
(
name
)
return
model
.
get
(
name
)
def
_search
(
self
,
query
,
search_term
):
values
=
search_term
.
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
return
query
def
get_list
(
self
,
page
,
sort_column
,
sort_desc
,
search
,
filters
,
def
get_list
(
self
,
page
,
sort_column
,
sort_desc
,
search
,
filters
,
execute
=
True
):
execute
=
True
):
"""
"""
...
@@ -182,38 +218,7 @@ class ModelView(BaseModelView):
...
@@ -182,38 +218,7 @@ class ModelView(BaseModelView):
# Search
# Search
if
self
.
_search_supported
and
search
:
if
self
.
_search_supported
and
search
:
values
=
search
.
split
(
' '
)
query
=
self
.
_search
(
query
,
search
)
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
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment