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
22b5fdf4
Commit
22b5fdf4
authored
Apr 04, 2016
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1249 from flask-admin/add_reference_filter_2
add mongoengine ReferenceField filter
parents
53fce33b
94511ccd
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
33 additions
and
2 deletions
+33
-2
filters.py
flask_admin/contrib/mongoengine/filters.py
+33
-2
No files found.
flask_admin/contrib/mongoengine/filters.py
View file @
22b5fdf4
import
datetime
from
flask_admin.babel
import
lazy_gettext
from
flask_admin.babel
import
lazy_gettext
from
flask_admin.model
import
filters
from
flask_admin.model
import
filters
from
.tools
import
parse_like_term
from
.tools
import
parse_like_term
from
mongoengine.queryset
import
Q
from
mongoengine.queryset
import
Q
from
bson.errors
import
InvalidId
from
bson.objectid
import
ObjectId
class
BaseMongoEngineFilter
(
filters
.
BaseFilter
):
class
BaseMongoEngineFilter
(
filters
.
BaseFilter
):
"""
"""
...
@@ -221,6 +222,31 @@ class DateTimeNotBetweenFilter(DateTimeBetweenFilter):
...
@@ -221,6 +222,31 @@ class DateTimeNotBetweenFilter(DateTimeBetweenFilter):
return
lazy_gettext
(
'not between'
)
return
lazy_gettext
(
'not between'
)
class
ReferenceObjectIdFilter
(
BaseMongoEngineFilter
):
def
validate
(
self
,
value
):
"""
Validate value.
If value is valid, returns `True` and `False` otherwise.
:param value:
Value to validate
"""
try
:
self
.
clean
(
value
)
return
True
except
InvalidId
:
return
False
def
clean
(
self
,
value
):
return
ObjectId
(
value
.
strip
())
def
apply
(
self
,
query
,
value
):
flt
=
{
'
%
s'
%
self
.
column
.
name
:
value
}
return
query
.
filter
(
**
flt
)
def
operation
(
self
):
return
lazy_gettext
(
'ObjectId equals'
)
# Base MongoEngine filter field converter
# Base MongoEngine filter field converter
class
FilterConverter
(
filters
.
BaseFilterConverter
):
class
FilterConverter
(
filters
.
BaseFilterConverter
):
strings
=
(
FilterLike
,
FilterNotLike
,
FilterEqual
,
FilterNotEqual
,
strings
=
(
FilterLike
,
FilterNotLike
,
FilterEqual
,
FilterNotEqual
,
...
@@ -236,6 +262,7 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -236,6 +262,7 @@ class FilterConverter(filters.BaseFilterConverter):
DateTimeGreaterFilter
,
DateTimeSmallerFilter
,
DateTimeGreaterFilter
,
DateTimeSmallerFilter
,
DateTimeBetweenFilter
,
DateTimeNotBetweenFilter
,
DateTimeBetweenFilter
,
DateTimeNotBetweenFilter
,
FilterEmpty
)
FilterEmpty
)
reference_filters
=
(
ReferenceObjectIdFilter
,)
def
convert
(
self
,
type_name
,
column
,
name
):
def
convert
(
self
,
type_name
,
column
,
name
):
filter_name
=
type_name
.
lower
()
filter_name
=
type_name
.
lower
()
...
@@ -264,3 +291,7 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -264,3 +291,7 @@ class FilterConverter(filters.BaseFilterConverter):
@
filters
.
convert
(
'DateTimeField'
,
'ComplexDateTimeField'
)
@
filters
.
convert
(
'DateTimeField'
,
'ComplexDateTimeField'
)
def
conv_datetime
(
self
,
column
,
name
):
def
conv_datetime
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
datetime_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
datetime_filters
]
@
filters
.
convert
(
'ReferenceField'
)
def
conv_reference
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
reference_filters
]
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