Commit 4d1b1460 authored by Bryan Hoyt's avatar Bryan Hoyt

Use related_name to generate inline field names. Fixes issues #417, #418.

parent c8cad66c
......@@ -36,14 +36,15 @@ class InlineModelFormList(InlineFieldList):
def display_row_controls(self, field):
return field.get_pk() is not None
def process(self, formdata, data=None):
if not formdata:
attr = getattr(self.model, self.prop)
data = self.model.select().where(attr == data).execute()
else:
data = None
return super(InlineModelFormList, self).process(formdata, data)
# *** bryhoyt removed def process() entirely, because I believe it was buggy
# (but worked because another part of the code had a complimentary bug)
# and I'm not sure why it was necessary anyway.
# If we want it back in, we need to fix the following bogus query:
# self.model.select().where(attr == data).execute() # `data` is not an ID, and only happened to be so because we patched it in in .contribute() below
#
# For reference:
# .process() introduced in https://github.com/mrjoes/flask-admin/commit/2845e4b28cb40b25e2bf544b327f6202dc7e5709
# Fixed, brokenly I think, in https://github.com/mrjoes/flask-admin/commit/4383eef3ce7eb01878f086928f8773adb9de79f8#diff-f87e7cd76fb9bc48c8681b24f238fb13R30
def populate_obj(self, obj, name):
pass
......@@ -234,7 +235,8 @@ class InlineModelConverter(InlineModelConverterBase):
allow_pk=True,
converter=converter)
prop_name = 'fa_%s' % model.__name__
prop_name = reverse_field.related_name
label = self.get_label(info, prop_name)
......@@ -246,10 +248,6 @@ class InlineModelConverter(InlineModelConverterBase):
info,
label=label or info.model.__name__))
setattr(field.rel_model,
prop_name,
property(lambda self: self.id))
return form_class
......
......@@ -116,7 +116,7 @@ class ModelView(BaseModelView):
class MyModelView(ModelView):
inline_models = ((Post, dict(form_label='Hello')))
2. Using target model name with `fa_` prefis:
2. Using field's related_name:
class Model1(Base):
# ...
......@@ -124,11 +124,11 @@ class ModelView(BaseModelView):
class Model2(Base):
# ...
pass
model1 = ForeignKeyField(related_name="model_twos")
class MyModel1View(Base):
inline_models = (Model2,)
column_labels = {'fa_Model2': 'Hello'}
column_labels = {'model_ones': 'Hello'}
"""
def __init__(self, model, name=None,
......
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