Commit 6c62d45d authored by Serge S. Koval's avatar Serge S. Koval

Fixed #235

parent d7e50ec4
......@@ -4,7 +4,6 @@ from flask import flash
from flask.ext.admin.babel import gettext, ngettext, lazy_gettext
from flask.ext.admin.model import BaseModelView
from flask.ext.admin.model.helpers import get_default_order
import mongoengine
from bson.objectid import ObjectId
......@@ -302,7 +301,7 @@ class ModelView(BaseModelView):
if sort_column:
query = query.order_by('%s%s' % ('-' if sort_desc else '', sort_column))
else:
order = get_default_order(self)
order = self._get_default_order()
if order:
query = query.order_by('%s%s' % ('-' if order[1] else '', order[0]))
......
......@@ -5,7 +5,6 @@ from flask import flash
from flask.ext.admin import form
from flask.ext.admin.babel import gettext, ngettext, lazy_gettext
from flask.ext.admin.model import BaseModelView
from flask.ext.admin.model.helpers import get_default_order
from peewee import PrimaryKeyField, ForeignKeyField, Field, CharField, TextField
from wtfpeewee.orm import model_form
......@@ -314,7 +313,7 @@ class ModelView(BaseModelView):
query, joins = self._order_by(query, joins, sort_field, sort_desc)
else:
order = get_default_order(self)
order = self._get_default_order()
if order:
query, joins = self._order_by(query, joins, order[0], order[1])
......
......@@ -9,7 +9,6 @@ from jinja2 import contextfunction
from flask.ext.admin.babel import gettext, ngettext, lazy_gettext
from flask.ext.admin.model import BaseModelView
from flask.ext.admin.model.helpers import get_default_order
from flask.ext.admin.actions import action
from .filters import BasePyMongoFilter
......@@ -207,7 +206,7 @@ class ModelView(BaseModelView):
if sort_column:
sort_by = [(sort_column, pymongo.DESCENDING if sort_desc else pymongo.ASCENDING)]
else:
order = get_default_order(self)
order = self.get_default_order()
if order:
sort_by = [(order[0], pymongo.DESCENDING if order[1] else pymongo.ASCENDING)]
......
......@@ -10,7 +10,6 @@ from flask import flash
from flask.ext.admin.tools import ObsoleteAttr
from flask.ext.admin.babel import gettext, ngettext, lazy_gettext
from flask.ext.admin.model import BaseModelView
from flask.ext.admin.model.helpers import get_default_order
from flask.ext.admin.actions import action
from flask.ext.admin.contrib.sqlamodel import form, filters, tools
......@@ -616,7 +615,7 @@ class ModelView(BaseModelView):
if mapper is not None:
table = mapper.tables[0]
if table.name not in joins:
if self._need_join(table) and table.name not in joins:
query = query.join(table)
joins.add(table.name)
elif isinstance(sort_field, Column):
......@@ -632,6 +631,19 @@ class ModelView(BaseModelView):
return query, joins
def _get_default_order(self):
order = super(ModelView, self)._get_default_order()
if order is not None:
field, direction = order
if isinstance(field, basestring):
field = getattr(self.model, field)
return field, direction
return None
def get_list(self, page, sort_column, sort_desc, search, filters, execute=True):
"""
Return models from the database.
......@@ -712,7 +724,7 @@ class ModelView(BaseModelView):
query, joins = self._order_by(query, joins, sort_field, sort_desc)
else:
order = get_default_order(self)
order = self._get_default_order()
if order:
query, joins = self._order_by(query, joins, order[0], order[1])
......
......@@ -636,6 +636,20 @@ class BaseModelView(BaseView, ActionsMixin):
return self._list_columns[idx]
def _get_default_order(self):
"""
Return default sort order
"""
if self.column_default_sort:
if isinstance(self.column_default_sort, tuple):
return self.column_default_sort
else:
return self.column_default_sort, False
return field, direction
return None
# Database-related API
def get_list(self, page, sort_field, sort_desc, search, filters):
"""
......
def get_default_order(view):
"""
Get default sort order from model view.
Returns (field, desc) tuple.
:param view:
View instance
"""
if view.column_default_sort:
if isinstance(view.column_default_sort, tuple):
return view.column_default_sort
else:
return (view.column_default_sort, False)
return 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