Commit 94c417a9 authored by Mihail Krivushin's avatar Mihail Krivushin

Fixed sorting, search, M2M

parent 41714663
...@@ -83,7 +83,7 @@ class AdminModelConverter(ModelConverter): ...@@ -83,7 +83,7 @@ class AdminModelConverter(ModelConverter):
'query_factory': lambda: self.view.session.query(remote_model) 'query_factory': lambda: self.view.session.query(remote_model)
}) })
if local_column.nullable: if local_column.nullable or prop.direction.name == 'MANYTOMANY':
kwargs['validators'].append(validators.Optional()) kwargs['validators'].append(validators.Optional())
elif prop.direction.name != 'MANYTOMANY': elif prop.direction.name != 'MANYTOMANY':
kwargs['validators'].append(validators.Required()) kwargs['validators'].append(validators.Required())
......
from sqlalchemy.orm.attributes import InstrumentedAttribute from sqlalchemy.orm.attributes import InstrumentedAttribute
from sqlalchemy.orm import subqueryload from sqlalchemy.orm import subqueryload
from sqlalchemy.sql.expression import desc from sqlalchemy.sql.expression import desc
from sqlalchemy import or_ from sqlalchemy import or_, Column
from wtforms.ext.sqlalchemy.orm import model_form from wtforms.ext.sqlalchemy.orm import model_form
from flask import flash from flask import flash
...@@ -229,7 +229,7 @@ class ModelView(BaseModelView): ...@@ -229,7 +229,7 @@ class ModelView(BaseModelView):
if column.foreign_keys or column.primary_key: if column.foreign_keys or column.primary_key:
continue continue
columns[p.key] = p.key columns[p.key] = column
return columns return columns
...@@ -260,7 +260,7 @@ class ModelView(BaseModelView): ...@@ -260,7 +260,7 @@ class ModelView(BaseModelView):
""" """
if self.searchable_columns: if self.searchable_columns:
self._search_fields = [] self._search_fields = []
self._search_joins_names = set() self._search_joins = set()
for p in self.searchable_columns: for p in self.searchable_columns:
for column in self._get_columns_for_field(p): for column in self._get_columns_for_field(p):
...@@ -274,7 +274,7 @@ class ModelView(BaseModelView): ...@@ -274,7 +274,7 @@ class ModelView(BaseModelView):
# If it belongs to different table - add a join # If it belongs to different table - add a join
if column.table != self.model.__table__: if column.table != self.model.__table__:
self._search_joins_names.add(column.table.name) self._search_joins.add(column.table)
return bool(self.searchable_columns) return bool(self.searchable_columns)
...@@ -413,9 +413,9 @@ class ModelView(BaseModelView): ...@@ -413,9 +413,9 @@ class ModelView(BaseModelView):
# Apply search criteria # Apply search criteria
if self._search_supported and search: if self._search_supported and search:
# Apply search-related joins # Apply search-related joins
if self._search_joins_names: if self._search_joins:
query = query.join(*self._search_joins_names) query = query.join(*self._search_joins)
joins |= self._search_joins_names joins |= self._search_joins
# Apply terms # Apply terms
terms = search.split(' ') terms = search.split(' ')
...@@ -470,8 +470,10 @@ class ModelView(BaseModelView): ...@@ -470,8 +470,10 @@ class ModelView(BaseModelView):
if table.name not in joins: if table.name not in joins:
query = query.join(table) query = query.join(table)
joins.add(table.name) joins.add(table.name)
elif isinstance(sort_field, Column):
pass
else: else:
sort_field = None raise TypeError('Wrong argument type')
if sort_field is not None: if sort_field is not None:
if sort_desc: if sort_desc:
......
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