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
a919e892
Commit
a919e892
authored
Aug 05, 2013
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Minor SQLa model_form refactoring
parent
c2c09b7f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
43 additions
and
40 deletions
+43
-40
form.py
flask_admin/contrib/sqla/form.py
+43
-40
No files found.
flask_admin/contrib/sqla/form.py
View file @
a919e892
...
@@ -69,6 +69,48 @@ class AdminModelConverter(ModelConverterBase):
...
@@ -69,6 +69,48 @@ class AdminModelConverter(ModelConverterBase):
return
None
return
None
def
_convert_relation
(
self
,
prop
,
kwargs
):
remote_model
=
prop
.
mapper
.
class_
local_column
=
prop
.
local_remote_pairs
[
0
][
0
]
kwargs
[
'label'
]
=
self
.
_get_label
(
prop
.
key
,
kwargs
)
kwargs
[
'description'
]
=
self
.
_get_description
(
prop
.
key
,
kwargs
)
if
local_column
.
nullable
:
kwargs
[
'validators'
]
.
append
(
validators
.
Optional
())
elif
prop
.
direction
.
name
!=
'MANYTOMANY'
:
kwargs
[
'validators'
]
.
append
(
validators
.
InputRequired
())
# Contribute model-related parameters
if
'allow_blank'
not
in
kwargs
:
kwargs
[
'allow_blank'
]
=
local_column
.
nullable
if
'query_factory'
not
in
kwargs
:
kwargs
[
'query_factory'
]
=
lambda
:
self
.
session
.
query
(
remote_model
)
if
'widget'
not
in
kwargs
:
if
prop
.
direction
.
name
==
'MANYTOONE'
:
kwargs
[
'widget'
]
=
form
.
Select2Widget
()
elif
prop
.
direction
.
name
==
'ONETOMANY'
:
kwargs
[
'widget'
]
=
form
.
Select2Widget
(
multiple
=
True
)
elif
prop
.
direction
.
name
==
'MANYTOMANY'
:
kwargs
[
'widget'
]
=
form
.
Select2Widget
(
multiple
=
True
)
# Override field type if necessary
override
=
self
.
_get_field_override
(
prop
.
key
)
if
override
:
return
override
(
**
kwargs
)
if
prop
.
direction
.
name
==
'MANYTOONE'
:
return
QuerySelectField
(
**
kwargs
)
elif
prop
.
direction
.
name
==
'ONETOMANY'
:
# Skip backrefs
if
not
local_column
.
foreign_keys
and
getattr
(
self
.
view
,
'column_hide_backrefs'
,
False
):
return
None
return
QuerySelectMultipleField
(
**
kwargs
)
elif
prop
.
direction
.
name
==
'MANYTOMANY'
:
return
QuerySelectMultipleField
(
**
kwargs
)
def
convert
(
self
,
model
,
mapper
,
prop
,
field_args
,
hidden_pk
):
def
convert
(
self
,
model
,
mapper
,
prop
,
field_args
,
hidden_pk
):
# Properly handle forced fields
# Properly handle forced fields
if
isinstance
(
prop
,
FieldPlaceholder
):
if
isinstance
(
prop
,
FieldPlaceholder
):
...
@@ -84,46 +126,7 @@ class AdminModelConverter(ModelConverterBase):
...
@@ -84,46 +126,7 @@ class AdminModelConverter(ModelConverterBase):
# Check if it is relation or property
# Check if it is relation or property
if
hasattr
(
prop
,
'direction'
):
if
hasattr
(
prop
,
'direction'
):
remote_model
=
prop
.
mapper
.
class_
return
self
.
_convert_relation
(
prop
,
kwargs
)
local_column
=
prop
.
local_remote_pairs
[
0
][
0
]
kwargs
[
'label'
]
=
self
.
_get_label
(
prop
.
key
,
kwargs
)
kwargs
[
'description'
]
=
self
.
_get_description
(
prop
.
key
,
kwargs
)
if
local_column
.
nullable
:
kwargs
[
'validators'
]
.
append
(
validators
.
Optional
())
elif
prop
.
direction
.
name
!=
'MANYTOMANY'
:
kwargs
[
'validators'
]
.
append
(
validators
.
InputRequired
())
# Contribute model-related parameters
if
'allow_blank'
not
in
kwargs
:
kwargs
[
'allow_blank'
]
=
local_column
.
nullable
if
'query_factory'
not
in
kwargs
:
kwargs
[
'query_factory'
]
=
lambda
:
self
.
session
.
query
(
remote_model
)
if
'widget'
not
in
kwargs
:
if
prop
.
direction
.
name
==
'MANYTOONE'
:
kwargs
[
'widget'
]
=
form
.
Select2Widget
()
elif
prop
.
direction
.
name
==
'ONETOMANY'
:
kwargs
[
'widget'
]
=
form
.
Select2Widget
(
multiple
=
True
)
elif
prop
.
direction
.
name
==
'MANYTOMANY'
:
kwargs
[
'widget'
]
=
form
.
Select2Widget
(
multiple
=
True
)
# Override field type if necessary
override
=
self
.
_get_field_override
(
prop
.
key
)
if
override
:
return
override
(
**
kwargs
)
if
prop
.
direction
.
name
==
'MANYTOONE'
:
return
QuerySelectField
(
**
kwargs
)
elif
prop
.
direction
.
name
==
'ONETOMANY'
:
# Skip backrefs
if
not
local_column
.
foreign_keys
and
getattr
(
self
.
view
,
'column_hide_backrefs'
,
False
):
return
None
return
QuerySelectMultipleField
(
**
kwargs
)
elif
prop
.
direction
.
name
==
'MANYTOMANY'
:
return
QuerySelectMultipleField
(
**
kwargs
)
else
:
else
:
# Ignore pk/fk
# Ignore pk/fk
if
hasattr
(
prop
,
'columns'
):
if
hasattr
(
prop
,
'columns'
):
...
...
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