Commit 53690bfb authored by Paul Brown's avatar Paul Brown

Merge pull request #901 from pawl/fix_editable_pk2

Allow primary keys with special characters in editable list view
parents 53cc248f 2648dec9
...@@ -141,11 +141,11 @@ class ListEditableFieldList(FieldList): ...@@ -141,11 +141,11 @@ class ListEditableFieldList(FieldList):
def _extract_indices(self, prefix, formdata): def _extract_indices(self, prefix, formdata):
offset = len(prefix) + 1 offset = len(prefix) + 1
for k in formdata: for name in formdata:
if k.startswith(prefix): # selects only relevant field (not CSRF, other fields, etc)
k = k[offset:].split('-', 1)[0] if name.startswith(prefix):
# removed "if k.isdigit():" # exclude offset (prefix-), remaining text is the index
yield k yield name[offset:]
def _add_entry(self, formdata=None, data=unset_value, index=None): def _add_entry(self, formdata=None, data=unset_value, index=None):
assert not self.max_entries or len(self.entries) < self.max_entries, \ assert not self.max_entries or len(self.entries) < self.max_entries, \
......
...@@ -118,7 +118,6 @@ def fill_db(db, Model1, Model2): ...@@ -118,7 +118,6 @@ def fill_db(db, Model1, Model2):
def test_model(): def test_model():
app, db, admin = setup() app, db, admin = setup()
Model1, Model2 = create_models(db) Model1, Model2 = create_models(db)
db.create_all()
view = CustomModelView(Model1, db.session) view = CustomModelView(Model1, db.session)
admin.add_view(view) admin.add_view(view)
...@@ -408,6 +407,43 @@ def test_column_editable_list(): ...@@ -408,6 +407,43 @@ def test_column_editable_list():
ok_('test1_val_3' in data) ok_('test1_val_3' in data)
def test_editable_list_special_pks():
''' Tests editable list view + a primary key with special characters
'''
app, db, admin = setup()
class Model1(db.Model):
def __init__(self, id=None, val1=None):
self.id = id
self.val1 = val1
id = db.Column(db.String(20), primary_key=True)
val1 = db.Column(db.String(20))
db.create_all()
view = CustomModelView(Model1, db.session, column_editable_list=['val1'])
admin.add_view(view)
db.session.add(Model1('1-1', 'test1'))
db.session.add(Model1('1-5', 'test2'))
db.session.commit()
client = app.test_client()
# Form - Test basic in-line edit functionality
rv = client.post('/admin/model1/ajax/update/', data={
'val1-1-1': 'change-success-1',
})
data = rv.data.decode('utf-8')
ok_('Record was successfully saved.' == data)
# ensure the value has changed
rv = client.get('/admin/model1/')
data = rv.data.decode('utf-8')
ok_('change-success-1' in data)
def test_column_filters(): def test_column_filters():
app, db, admin = setup() app, db, admin = setup()
...@@ -1301,7 +1337,6 @@ def test_relations(): ...@@ -1301,7 +1337,6 @@ def test_relations():
def test_on_model_change_delete(): def test_on_model_change_delete():
app, db, admin = setup() app, db, admin = setup()
Model1, _ = create_models(db) Model1, _ = create_models(db)
db.create_all()
class ModelView(CustomModelView): class ModelView(CustomModelView):
def on_model_change(self, form, model, is_created): def on_model_change(self, form, model, is_created):
...@@ -1666,7 +1701,6 @@ def test_ajax_fk_multi(): ...@@ -1666,7 +1701,6 @@ def test_ajax_fk_multi():
def test_safe_redirect(): def test_safe_redirect():
app, db, admin = setup() app, db, admin = setup()
Model1, _ = create_models(db) Model1, _ = create_models(db)
db.create_all()
view = CustomModelView(Model1, db.session) view = CustomModelView(Model1, db.session)
admin.add_view(view) admin.add_view(view)
...@@ -1693,7 +1727,6 @@ def test_safe_redirect(): ...@@ -1693,7 +1727,6 @@ def test_safe_redirect():
def test_simple_list_pager(): def test_simple_list_pager():
app, db, admin = setup() app, db, admin = setup()
Model1, _ = create_models(db) Model1, _ = create_models(db)
db.create_all()
class TestModelView(CustomModelView): class TestModelView(CustomModelView):
simple_list_pager = True simple_list_pager = True
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment