Commit d897c718 authored by Serge S. Koval's avatar Serge S. Koval Committed by GitHub

Merge pull request #1348 from vToMy/bugfix/remote_hybrid_property

Added support for remote hybrid properties filters
parents d7ee730a 8f7a35ed
...@@ -190,7 +190,12 @@ def get_hybrid_properties(model): ...@@ -190,7 +190,12 @@ def get_hybrid_properties(model):
def is_hybrid_property(model, attr_name): def is_hybrid_property(model, attr_name):
return attr_name in get_hybrid_properties(model) names = attr_name.split('.')
last_model = model
for i in range(len(names)-1):
last_model = getattr(last_model, names[i]).property.argument
last_name = names[-1]
return last_name in get_hybrid_properties(last_model)
def is_relationship(attr): def is_relationship(attr):
...@@ -199,9 +204,3 @@ def is_relationship(attr): ...@@ -199,9 +204,3 @@ def is_relationship(attr):
def is_association_proxy(attr): def is_association_proxy(attr):
return hasattr(attr, 'extension_type') and attr.extension_type == ASSOCIATION_PROXY return hasattr(attr, 'extension_type') and attr.extension_type == ASSOCIATION_PROXY
def get_association_proxy_column_name(attr):
# TODO find a better way to get the name
name, = [key for key, value in inspect(attr.owning_class).all_orm_descriptors.items() if value is attr]
return name
...@@ -2,6 +2,7 @@ import logging ...@@ -2,6 +2,7 @@ import logging
import warnings import warnings
import inspect import inspect
from speaklater import is_lazy_string, make_lazy_string
from sqlalchemy.orm.attributes import InstrumentedAttribute from sqlalchemy.orm.attributes import InstrumentedAttribute
from sqlalchemy.orm import joinedload, aliased from sqlalchemy.orm import joinedload, aliased
from sqlalchemy.sql.expression import desc from sqlalchemy.sql.expression import desc
...@@ -617,6 +618,7 @@ class ModelView(BaseModelView): ...@@ -617,6 +618,7 @@ class ModelView(BaseModelView):
is_hybrid_property = tools.is_hybrid_property(self.model, name) is_hybrid_property = tools.is_hybrid_property(self.model, name)
if is_hybrid_property: if is_hybrid_property:
column = attr column = attr
column.key = name.split('.')[-1]
else: else:
columns = tools.get_columns_for_field(attr) columns = tools.get_columns_for_field(attr)
...@@ -636,7 +638,14 @@ class ModelView(BaseModelView): ...@@ -636,7 +638,14 @@ class ModelView(BaseModelView):
if not isinstance(name, string_types): if not isinstance(name, string_types):
visible_name = self.get_column_name(name.property.key) visible_name = self.get_column_name(name.property.key)
else: else:
visible_name = self.get_column_name(name) column_name = self.get_column_name(name)
def prettify():
return column_name.replace('.', ' / ')
if is_lazy_string(column_name):
visible_name = make_lazy_string(prettify)
else:
visible_name = prettify()
type_name = type(column.type).__name__ type_name = type(column.type).__name__
......
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