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