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
1f3d1b72
Commit
1f3d1b72
authored
Oct 06, 2018
by
PJ Janse van Rensburg
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fix-inline-model-form-list'
parents
9d67f191
ae1db327
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
31 additions
and
2 deletions
+31
-2
changelog.rst
doc/changelog.rst
+1
-0
fields.py
flask_admin/contrib/sqla/fields.py
+26
-2
fields.py
flask_admin/model/fields.py
+4
-0
No files found.
doc/changelog.rst
View file @
1f3d1b72
...
@@ -7,6 +7,7 @@ next release
...
@@ -7,6 +7,7 @@ next release
* Sort on multiple columns with `column_default_sort`
* Sort on multiple columns with `column_default_sort`
* Upgrade Leaflet and Leaflet.draw plugins, used for geoalchemy integration
* Upgrade Leaflet and Leaflet.draw plugins, used for geoalchemy integration
* Specify `minimum_input_length` for ajax widget
* Specify `minimum_input_length` for ajax widget
* SQLAlchemy fix that lets you use inline model forms where models have multiple primary keys
1.5.2
1.5.2
-----
-----
...
...
flask_admin/contrib/sqla/fields.py
View file @
1f3d1b72
...
@@ -272,11 +272,11 @@ class InlineModelFormList(InlineFieldList):
...
@@ -272,11 +272,11 @@ class InlineModelFormList(InlineFieldList):
return
return
# Create primary key map
# Create primary key map
pk_map
=
dict
((
str
(
getattr
(
v
,
self
.
_pk
)
),
v
)
for
v
in
values
)
pk_map
=
dict
((
get_obj_pk
(
v
,
self
.
_pk
),
v
)
for
v
in
values
)
# Handle request data
# Handle request data
for
field
in
self
.
entries
:
for
field
in
self
.
entries
:
field_id
=
str
(
field
.
get_pk
()
)
field_id
=
get_field_id
(
field
)
is_created
=
field_id
not
in
pk_map
is_created
=
field_id
not
in
pk_map
if
not
is_created
:
if
not
is_created
:
...
@@ -298,3 +298,27 @@ def get_pk_from_identity(obj):
...
@@ -298,3 +298,27 @@ def get_pk_from_identity(obj):
# TODO: Remove me
# TODO: Remove me
key
=
identity_key
(
instance
=
obj
)[
1
]
key
=
identity_key
(
instance
=
obj
)[
1
]
return
u':'
.
join
(
text_type
(
x
)
for
x
in
key
)
return
u':'
.
join
(
text_type
(
x
)
for
x
in
key
)
def
get_obj_pk
(
obj
,
pk
):
"""
get and format pk from obj
:rtype: text_type
"""
if
isinstance
(
pk
,
tuple
):
return
tuple
(
text_type
(
getattr
(
obj
,
k
))
for
k
in
pk
)
return
text_type
(
getattr
(
obj
,
pk
))
def
get_field_id
(
field
):
"""
get and format id from field
:rtype: text_type
"""
field_id
=
field
.
get_pk
()
if
isinstance
(
field_id
,
tuple
):
return
tuple
(
text_type
(
_
)
for
_
in
field_id
)
return
text_type
(
field_id
)
flask_admin/model/fields.py
View file @
1f3d1b72
...
@@ -118,6 +118,10 @@ class InlineModelFormField(FormField):
...
@@ -118,6 +118,10 @@ class InlineModelFormField(FormField):
self
.
form_opts
=
form_opts
self
.
form_opts
=
form_opts
def
get_pk
(
self
):
def
get_pk
(
self
):
if
isinstance
(
self
.
_pk
,
(
tuple
,
list
)):
return
tuple
(
getattr
(
self
.
form
,
pk
)
.
data
for
pk
in
self
.
_pk
)
return
getattr
(
self
.
form
,
self
.
_pk
)
.
data
return
getattr
(
self
.
form
,
self
.
_pk
)
.
data
def
populate_obj
(
self
,
obj
,
name
):
def
populate_obj
(
self
,
obj
,
name
):
...
...
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