Как мне использовать flask-admin column_sortable_list с базой данных - PullRequest
1 голос
/ 26 марта 2019

Я создаю flask веб-сайт, который использует flask-admin для управления базой данных.Я пытаюсь отсортировать столбец, который содержит внешний ключ.

Одно из моих представлений модели flask-admin предназначено для промежуточной таблицы, я хотел бы отсортировать таблицу в моем представлении по столбцу, который является отношениемк другому столу.по какой-то причине column_default_sort = 'pizza_id' сортирует список, но column_sortable_list = ('pizza_id',) не работает

вот как это выглядит сейчас table in view я хотел бы, чтобы заголовок таблицы Pizza был синим, как дляId означает, что он может щелкнуть по нему и отсортировать по этому столбцу.пример приведен ниже

Imgur

вот мои модели sqlalchemy


class Topping(db.Model):
    __tablename__ = 'toppings'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False, unique=True)
    description = db.Column(db.Text)
    price = db.Column(db.Float, nullable=False)

    def __repr__(self):
        return f"{self.name}"


class Pizza(db.Model):
    __tablename__ = 'pizza'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False, unique=True)
    description = db.Column(db.String)
    extra_price = db.Column(db.Float)
    toppings = db.relationship('Topping', secondary='pizza_toppings')

    def __repr__(self):
        return self.name


# my pizza intermediate table
class PizzaTopping(db.Model):
    __tablename__ = 'pizza_toppings'

    id = db.Column(db.Integer, primary_key=True)

    pizza = db.relationship('Pizza', primaryjoin='PizzaTopping.pizza_id == Pizza.id', backref='pizza_toppings')
    topping = db.relationship('Topping', primaryjoin='PizzaTopping.topping_id == Topping.id', backref='pizza_toppings')

    pizza_id = db.Column(db.ForeignKey('pizza.id'), nullable=False)
    topping_id = db.Column(db.ForeignKey('toppings.id'), nullable=False)

вот мой вид модели фляги-admin

class MyModelView(ModelView):
    can_set_page_size = True
    page_size = 15
    column_display_pk = True
    column_display_all_relations = True
    column_sortable_list = ('pizza_id',)
    column_default_sort = 'pizza_id'
    can_export = True

    def is_accessible(self):
        return current_user.is_authenticated and current_user.has_roles(("owner", 'admin'))

    def inaccessible_callback(self, name, **kwargs):
        return redirect('/')

Любая помощь очень ценится, и если вам нужна дополнительная информация, пожалуйста, спросите.

1 Ответ

0 голосов
/ 26 марта 2019

Использовать пунктирный атрибут отношения.например, для сортировки по названию пиццы или топ-названию:

class MyModelView(ModelView):

    # ...
    column_sortable_list = ('pizza.name', 'topping.name', 'id')
    # ...
...