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
591c38e2
Commit
591c38e2
authored
Nov 29, 2014
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #714 from bocribbz/fix_propagate_filter_name
Fix filters for mongoengine, peewee and pymongo
parents
c9cc17d1
2273754f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
219 additions
and
21 deletions
+219
-21
view.py
flask_admin/contrib/mongoengine/view.py
+1
-1
view.py
flask_admin/contrib/peewee/view.py
+1
-1
view.py
flask_admin/contrib/pymongo/view.py
+1
-1
test_basic.py
flask_admin/tests/mongoengine/test_basic.py
+107
-16
test_basic.py
flask_admin/tests/peeweemodel/test_basic.py
+109
-2
No files found.
flask_admin/contrib/mongoengine/view.py
View file @
591c38e2
...
...
@@ -431,7 +431,7 @@ class ModelView(BaseModelView):
# Filters
if
self
.
_filters
:
for
flt
,
value
in
filters
:
for
flt
,
flt_name
,
value
in
filters
:
f
=
self
.
_filters
[
flt
]
query
=
f
.
apply
(
query
,
value
)
...
...
flask_admin/contrib/peewee/view.py
View file @
591c38e2
...
...
@@ -309,7 +309,7 @@ class ModelView(BaseModelView):
# Filters
if
self
.
_filters
:
for
flt
,
value
in
filters
:
for
flt
,
flt_name
,
value
in
filters
:
f
=
self
.
_filters
[
flt
]
query
=
self
.
_handle_join
(
query
,
f
.
column
,
joins
)
...
...
flask_admin/contrib/pymongo/view.py
View file @
591c38e2
...
...
@@ -170,7 +170,7 @@ class ModelView(BaseModelView):
if
self
.
_filters
:
data
=
[]
for
flt
,
value
in
filters
:
for
flt
,
flt_name
,
value
in
filters
:
f
=
self
.
_filters
[
flt
]
data
=
f
.
apply
(
data
,
value
)
...
...
flask_admin/tests/mongoengine/test_basic.py
View file @
591c38e2
...
...
@@ -33,9 +33,15 @@ def create_models(db):
test3
=
db
.
StringField
()
test4
=
db
.
StringField
()
def
__str__
(
self
):
return
self
.
test1
class
Model2
(
db
.
Document
):
string_field
=
db
.
StringField
()
int_field
=
db
.
IntField
()
bool_field
=
db
.
BooleanField
()
model1
=
db
.
ReferenceField
(
Model1
)
Model1
.
objects
.
delete
()
Model2
.
objects
.
delete
()
...
...
@@ -115,7 +121,106 @@ def test_model():
eq_
(
rv
.
status_code
,
302
)
eq_
(
Model1
.
objects
.
count
(),
0
)
def
test_column_filters
():
app
,
db
,
admin
=
setup
()
Model1
,
Model2
=
create_models
(
db
)
# fill DB with values
model1_obj1
=
Model1
(
test1
=
u'test1_val_1'
,
test2
=
u'test2_val_1'
)
model1_obj1
.
save
()
model1_obj2
=
Model1
(
test1
=
u'test1_val_2'
,
test2
=
u'test2_val_2'
)
model1_obj2
.
save
()
model2_obj1
=
Model2
(
string_field
=
u'string_field_val_1'
,
int_field
=
5000
)
model2_obj1
.
save
()
model2_obj2
=
Model2
(
string_field
=
u'string_field_val_2'
,
int_field
=
9000
)
model2_obj2
.
save
()
# Test string filter
view
=
CustomModelView
(
Model1
,
column_filters
=
[
'test1'
])
admin
.
add_view
(
view
)
eq_
(
len
(
view
.
_filters
),
4
)
eq_
([(
f
[
'index'
],
f
[
'operation'
])
for
f
in
view
.
_filter_groups
[
u'Test1'
]],
[
(
0
,
'equals'
),
(
1
,
'not equal'
),
(
2
,
'contains'
),
(
3
,
'not contains'
),
])
# Make some test clients
client
=
app
.
test_client
()
# string - equals
rv
=
client
.
get
(
'/admin/model1/?flt0_0=test1_val_1'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2_val_1'
in
data
)
ok_
(
'test1_val_2'
not
in
data
)
# string - not equal
rv
=
client
.
get
(
'/admin/model1/?flt0_1=test1_val_1'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2_val_1'
not
in
data
)
ok_
(
'test1_val_2'
in
data
)
# string - contains
rv
=
client
.
get
(
'/admin/model1/?flt0_2=test1_val_1'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2_val_1'
in
data
)
ok_
(
'test1_val_2'
not
in
data
)
# string - not contains
rv
=
client
.
get
(
'/admin/model1/?flt0_3=test1_val_1'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2_val_1'
not
in
data
)
ok_
(
'test1_val_2'
in
data
)
# Test numeric filter
view
=
CustomModelView
(
Model2
,
column_filters
=
[
'int_field'
])
admin
.
add_view
(
view
)
eq_
([(
f
[
'index'
],
f
[
'operation'
])
for
f
in
view
.
_filter_groups
[
u'Int Field'
]],
[
(
0
,
'equals'
),
(
1
,
'not equal'
),
(
2
,
'greater than'
),
(
3
,
'smaller than'
),
])
# integer - equals
rv
=
client
.
get
(
'/admin/model2/?flt0_0=5000'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'string_field_val_1'
in
data
)
ok_
(
'string_field_val_2'
not
in
data
)
# integer - not equal
rv
=
client
.
get
(
'/admin/model2/?flt0_1=5000'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'string_field_val_1'
not
in
data
)
ok_
(
'string_field_val_2'
in
data
)
# integer - greater
rv
=
client
.
get
(
'/admin/model2/?flt0_2=6000'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'string_field_val_1'
not
in
data
)
ok_
(
'string_field_val_2'
in
data
)
# integer - smaller
rv
=
client
.
get
(
'/admin/model2/?flt0_3=6000'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'string_field_val_1'
in
data
)
ok_
(
'string_field_val_2'
not
in
data
)
def
test_default_sort
():
app
,
db
,
admin
=
setup
()
M1
,
_
=
create_models
(
db
)
...
...
@@ -349,21 +454,7 @@ def test_nested_list_subdocument():
def
test_ajax_fk
():
app
,
db
,
admin
=
setup
()
class
Model1
(
db
.
Document
):
test1
=
db
.
StringField
(
max_length
=
20
)
test2
=
db
.
StringField
(
max_length
=
20
)
def
__str__
(
self
):
return
self
.
test1
class
Model2
(
db
.
Document
):
int_field
=
db
.
IntField
()
bool_field
=
db
.
BooleanField
()
model1
=
db
.
ReferenceField
(
Model1
)
Model1
.
objects
.
delete
()
Model2
.
objects
.
delete
()
Model1
,
Model2
=
create_models
(
db
)
view
=
CustomModelView
(
Model2
,
...
...
flask_admin/tests/peeweemodel/test_basic.py
View file @
591c38e2
...
...
@@ -47,11 +47,22 @@ def create_models(db):
test2
=
peewee
.
CharField
(
max_length
=
20
)
test3
=
peewee
.
TextField
(
null
=
True
)
test4
=
peewee
.
TextField
(
null
=
True
)
def
__str__
(
self
):
return
self
.
test1
class
Model2
(
BaseModel
):
def
__init__
(
self
,
char_field
=
None
,
int_field
=
None
,
bool_field
=
0
):
super
(
Model2
,
self
)
.
__init__
()
self
.
char_field
=
char_field
self
.
int_field
=
int_field
self
.
bool_field
=
bool_field
char_field
=
peewee
.
CharField
(
max_length
=
20
)
int_field
=
peewee
.
IntegerField
()
bool_field
=
peewee
.
BooleanField
()
Model1
.
create_table
()
Model2
.
create_table
()
...
...
@@ -129,6 +140,102 @@ def test_model():
eq_
(
rv
.
status_code
,
302
)
eq_
(
Model1
.
select
()
.
count
(),
0
)
def
test_column_filters
():
app
,
db
,
admin
=
setup
()
Model1
,
Model2
=
create_models
(
db
)
# fill DB with values
Model1
(
'test1_val_1'
,
'test2_val_1'
)
.
save
()
Model1
(
'test1_val_2'
,
'test2_val_2'
)
.
save
()
Model2
(
'char_field_val_1'
,
5000
)
.
save
()
Model2
(
'char_field_val_2'
,
9000
)
.
save
()
# Test string filter
view
=
CustomModelView
(
Model1
,
column_filters
=
[
'test1'
])
admin
.
add_view
(
view
)
eq_
(
len
(
view
.
_filters
),
4
)
eq_
([(
f
[
'index'
],
f
[
'operation'
])
for
f
in
view
.
_filter_groups
[
u'Test1'
]],
[
(
0
,
'equals'
),
(
1
,
'not equal'
),
(
2
,
'contains'
),
(
3
,
'not contains'
),
])
# Make some test clients
client
=
app
.
test_client
()
# string - equals
rv
=
client
.
get
(
'/admin/model1/?flt0_0=test1_val_1'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2_val_1'
in
data
)
ok_
(
'test1_val_2'
not
in
data
)
# string - not equal
rv
=
client
.
get
(
'/admin/model1/?flt0_1=test1_val_1'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2_val_1'
not
in
data
)
ok_
(
'test1_val_2'
in
data
)
# string - contains
rv
=
client
.
get
(
'/admin/model1/?flt0_2=test1_val_1'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2_val_1'
in
data
)
ok_
(
'test1_val_2'
not
in
data
)
# string - not contains
rv
=
client
.
get
(
'/admin/model1/?flt0_3=test1_val_1'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2_val_1'
not
in
data
)
ok_
(
'test1_val_2'
in
data
)
# Test numeric filter
view
=
CustomModelView
(
Model2
,
column_filters
=
[
'int_field'
])
admin
.
add_view
(
view
)
eq_
([(
f
[
'index'
],
f
[
'operation'
])
for
f
in
view
.
_filter_groups
[
u'Int Field'
]],
[
(
0
,
'equals'
),
(
1
,
'not equal'
),
(
2
,
'greater than'
),
(
3
,
'smaller than'
),
])
# integer - equals
rv
=
client
.
get
(
'/admin/model2/?flt0_0=5000'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'char_field_val_1'
in
data
)
ok_
(
'char_field_val_2'
not
in
data
)
# integer - not equal
rv
=
client
.
get
(
'/admin/model2/?flt0_1=5000'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'char_field_val_1'
not
in
data
)
ok_
(
'char_field_val_2'
in
data
)
# integer - greater
rv
=
client
.
get
(
'/admin/model2/?flt0_2=6000'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'char_field_val_1'
not
in
data
)
ok_
(
'char_field_val_2'
in
data
)
# integer - smaller
rv
=
client
.
get
(
'/admin/model2/?flt0_3=6000'
)
eq_
(
rv
.
status_code
,
200
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'char_field_val_1'
in
data
)
ok_
(
'char_field_val_2'
not
in
data
)
def
test_default_sort
():
app
,
db
,
admin
=
setup
()
...
...
@@ -272,4 +379,4 @@ def test_ajax_fk():
ok_
(
mdl
is
not
None
)
ok_
(
mdl
.
model1
is
not
None
)
eq_
(
mdl
.
model1
.
id
,
model
.
id
)
eq_
(
mdl
.
model1
.
test1
,
u'first'
)
eq_
(
mdl
.
model1
.
test1
,
u'first'
)
\ No newline at end of file
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