Commit 7f6a3be3 authored by Josh Schneier's avatar Josh Schneier

add support for ``is_created`` to inline forms

parent 83d2d309
......@@ -36,13 +36,14 @@ class ModelFormField(InlineFormField):
def populate_obj(self, obj, name):
candidate = getattr(obj, name, None)
if candidate is None:
is_created = candidate is None
if is_created:
candidate = self.model()
setattr(obj, name, candidate)
self.form.populate_obj(candidate)
self.view.on_model_change(self.form, candidate)
self.view._on_model_change(self.form, candidate, is_created)
class MongoFileField(fields.FileField):
......
......@@ -61,7 +61,8 @@ class InlineModelFormList(InlineFieldList):
for field in self.entries:
field_id = field.get_pk()
if field_id in pk_map:
is_created = field_id not in pk_map
if not is_created:
model = pk_map[field_id]
if self.should_delete(field):
......@@ -75,7 +76,7 @@ class InlineModelFormList(InlineFieldList):
# Force relation
setattr(model, self.prop, model_id)
self.inline_view.on_model_change(field, model)
self.inline_view._on_model_change(field, model, is_created)
model.save()
......
......@@ -279,7 +279,8 @@ class InlineModelFormList(InlineFieldList):
for field in self.entries:
field_id = field.get_pk()
if field_id in pk_map:
is_created = field_id not in pk_map
if not is_created:
model = pk_map[field_id]
if self.should_delete(field):
......@@ -291,7 +292,7 @@ class InlineModelFormList(InlineFieldList):
field.populate_obj(model, None)
self.inline_view.on_model_change(field, model)
self.inline_view._on_model_change(field, model, is_created)
def get_pk_from_identity(obj):
......
import inspect
import warnings
from flask_admin.form import BaseForm, rules
from flask_admin._compat import iteritems
......@@ -107,7 +108,7 @@ class InlineBaseFormAdmin(object):
"""
return form_class
def on_model_change(self, form, model):
def on_model_change(self, form, model, is_created):
"""
Called when inline model is about to be saved.
......@@ -115,9 +116,24 @@ class InlineBaseFormAdmin(object):
Inline form
:param model:
Model
:param is_created:
Will be set to True if the model is being created, False if edited
"""
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)
class InlineFormAdmin(InlineBaseFormAdmin):
"""
......
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