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

Allow inline model post-processing for sqla/pewee backends

parent 9207bdc6
......@@ -85,11 +85,15 @@ class FilterSmaller(BaseMongoEngineFilter):
# Customized type filters
class BooleanEqualFilter(FilterEqual, filters.BaseBooleanFilter):
pass
def apply(self, query, value):
flt = {'%s' % self.column.name: value == '1'}
return query.filter(**flt)
class BooleanNotEqualFilter(FilterNotEqual, filters.BaseBooleanFilter):
pass
def apply(self, query, value):
flt = {'%s' % self.column.name: value != '1'}
return query.filter(**flt)
# Base peewee filter field converter
......
......@@ -13,10 +13,11 @@ from .tools import get_primary_key
class InlineModelFormList(InlineFieldList):
def __init__(self, form, model, prop, **kwargs):
def __init__(self, form, model, prop, inline_view, **kwargs):
self.form = form
self.model = model
self.prop = prop
self.inline_view = inline_view
self._pk = get_primary_key(model)
......@@ -63,6 +64,8 @@ class InlineModelFormList(InlineFieldList):
# Force relation
setattr(model, self.prop, model_id)
self.inline_view.on_model_change(field, model)
model.save()
......
......@@ -18,11 +18,6 @@ except ImportError:
has_identity_key = False
__all__ = (
'QuerySelectField', 'QuerySelectMultipleField',
)
class QuerySelectField(SelectFieldBase):
"""
Will display a select drop-down field to choose between ORM results in a
......@@ -184,7 +179,7 @@ class InlineModelFormList(InlineFieldList):
"""
TODO: Documentation
"""
def __init__(self, form, session, model, prop, **kwargs):
def __init__(self, form, session, model, prop, inline_view, **kwargs):
"""
Default constructor.
......@@ -196,11 +191,14 @@ class InlineModelFormList(InlineFieldList):
Related model
:param prop:
Related property name
:param inline_view:
Inline view
"""
self.form = form
self.session = session
self.model = model
self.prop = prop
self.inline_view = inline_view
self._pk = get_primary_key(model)
......@@ -234,6 +232,8 @@ class InlineModelFormList(InlineFieldList):
field.populate_obj(model, None)
self.inline_view.on_model_change(field, model)
def get_pk_from_identity(obj):
# TODO: Remove me
......
......@@ -470,11 +470,11 @@ class InlineModelConverter(InlineModelConverterBase):
# Create form
child_form = get_form(info.model,
converter,
only=info.form_columns,
exclude=exclude,
field_args=info.form_args,
hidden_pk=True)
converter,
only=info.form_columns,
exclude=exclude,
field_args=info.form_args,
hidden_pk=True)
# Post-process form
child_form = info.postprocess_form(child_form)
......@@ -492,6 +492,7 @@ class InlineModelConverter(InlineModelConverterBase):
self.session,
info.model,
reverse_prop.key,
info
**kwargs))
return form_class
......@@ -56,6 +56,17 @@ class InlineFormAdmin(object):
"""
return form_class
def on_model_change(self, form, model):
"""
Called when inline model is about to be saved.
:param form:
Inline form
:param model:
Model
"""
pass
class ModelConverterBase(object):
def __init__(self, converters=None, use_mro=True):
......@@ -93,8 +104,8 @@ class ModelConverterBase(object):
return None
def get_form(self, model, base_class=BaseForm,
only=None, exclude=None,
field_args=None):
only=None, exclude=None,
field_args=None):
raise NotImplemented()
......
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