Commit b6c8c836 authored by Serge S. Koval's avatar Serge S. Koval

Fixed #247. on_model_change now accepts third parameter is_created

parent 8f1aec03
- Python 3 - Python 3
- Test for raw wtforms form - Test for raw wtforms form
- Model backends - Model backends
- Contribute field declaratively with sort
- model_changed callback to accept 3rd parameter - model_changed callback to accept 3rd parameter
- MongoEngine - MongoEngine
- ImageField support - ImageField support
...@@ -343,7 +343,7 @@ class ModelView(BaseModelView): ...@@ -343,7 +343,7 @@ class ModelView(BaseModelView):
try: try:
model = self.model() model = self.model()
form.populate_obj(model) form.populate_obj(model)
self.on_model_change(form, model) self._on_model_change(form, model, True)
model.save() model.save()
except Exception as ex: except Exception as ex:
flash(gettext('Failed to create model. %(error)s', error=str(ex)), flash(gettext('Failed to create model. %(error)s', error=str(ex)),
...@@ -366,7 +366,7 @@ class ModelView(BaseModelView): ...@@ -366,7 +366,7 @@ class ModelView(BaseModelView):
""" """
try: try:
form.populate_obj(model) form.populate_obj(model)
self.on_model_change(form, model) self._on_model_change(form, model, False)
model.save() model.save()
except Exception as ex: except Exception as ex:
flash(gettext('Failed to update model. %(error)s', error=str(ex)), flash(gettext('Failed to update model. %(error)s', error=str(ex)),
......
...@@ -335,7 +335,7 @@ class ModelView(BaseModelView): ...@@ -335,7 +335,7 @@ class ModelView(BaseModelView):
try: try:
model = self.model() model = self.model()
form.populate_obj(model) form.populate_obj(model)
self.on_model_change(form, model) self._on_model_change(form, model, True)
model.save() model.save()
# For peewee have to save inline forms after model was saved # For peewee have to save inline forms after model was saved
...@@ -352,7 +352,7 @@ class ModelView(BaseModelView): ...@@ -352,7 +352,7 @@ class ModelView(BaseModelView):
def update_model(self, form, model): def update_model(self, form, model):
try: try:
form.populate_obj(model) form.populate_obj(model)
self.on_model_change(form, model) self._on_model_change(form, model, False)
model.save() model.save()
# For peewee have to save inline forms after model was saved # For peewee have to save inline forms after model was saved
......
...@@ -255,7 +255,7 @@ class ModelView(BaseModelView): ...@@ -255,7 +255,7 @@ class ModelView(BaseModelView):
""" """
try: try:
model = form.data model = form.data
self.on_model_change(form, model) self._on_model_change(form, model, True)
self.coll.insert(model) self.coll.insert(model)
except Exception as ex: except Exception as ex:
flash(gettext('Failed to create model. %(error)s', error=str(ex)), flash(gettext('Failed to create model. %(error)s', error=str(ex)),
...@@ -278,7 +278,7 @@ class ModelView(BaseModelView): ...@@ -278,7 +278,7 @@ class ModelView(BaseModelView):
""" """
try: try:
model.update(form.data) model.update(form.data)
self.on_model_change(form, model) self._on_model_change(form, model, False)
pk = self.get_pk_value(model) pk = self.get_pk_value(model)
self.coll.update({'_id': pk}, model) self.coll.update({'_id': pk}, model)
......
...@@ -764,7 +764,7 @@ class ModelView(BaseModelView): ...@@ -764,7 +764,7 @@ class ModelView(BaseModelView):
model = self.model() model = self.model()
form.populate_obj(model) form.populate_obj(model)
self.session.add(model) self.session.add(model)
self.on_model_change(form, model) self._on_model_change(form, model, True)
self.session.commit() self.session.commit()
except Exception as ex: except Exception as ex:
flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error')
...@@ -787,7 +787,7 @@ class ModelView(BaseModelView): ...@@ -787,7 +787,7 @@ class ModelView(BaseModelView):
""" """
try: try:
form.populate_obj(model) form.populate_obj(model)
self.on_model_change(form, model) self._on_model_change(form, model, False)
self.session.commit() self.session.commit()
except Exception as ex: except Exception as ex:
flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error')
......
...@@ -707,7 +707,7 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -707,7 +707,7 @@ class BaseModelView(BaseView, ActionsMixin):
raise NotImplemented('Please implement get_one method') raise NotImplemented('Please implement get_one method')
# Model event handlers # Model event handlers
def on_model_change(self, form, model): def on_model_change(self, form, model, is_created):
""" """
Perform some actions after a model is created or updated. Perform some actions after a model is created or updated.
...@@ -720,9 +720,24 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -720,9 +720,24 @@ class BaseModelView(BaseView, ActionsMixin):
Form used to create/update model Form used to create/update model
:param model: :param model:
Model that will be created/updated Model that will be created/updated
:param is_created:
Will be set to True if model was created and to False if edited
""" """
pass pass
def _on_model_change(self, form, model, is_created):
"""
Compatibility helper.
"""
try:
self.on_model_change(form, model, is_created)
except TypeError:
msg = ('%s.on_model_change() now accepts third ' +
'parameter is_created. Please update your code') % self.model
warnings.warn(msg)
self.on_model_change(form, model)
def after_model_change(self, form, model, is_created): def after_model_change(self, form, model, is_created):
""" """
Perform some actions after a model was created or updated and Perform some actions after a model was created or updated and
......
...@@ -502,7 +502,7 @@ def test_on_model_change_delete(): ...@@ -502,7 +502,7 @@ def test_on_model_change_delete():
db.create_all() db.create_all()
class ModelView(CustomModelView): class ModelView(CustomModelView):
def on_model_change(self, form, model): def on_model_change(self, form, model, is_created):
model.test1 = model.test1.upper() model.test1 = model.test1.upper()
def on_model_delete(self, model): def on_model_delete(self, model):
......
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