我如何在数据库关系中使用flask-admin column_sortable_list - python

我正在建立一个使用flask进行数据库管理的flask-admin网站。我正在尝试对包含外键的列进行排序。

我的flask-admin模型视图之一是用于中间表的,我想通过与另一表有关系的列对视图上的表进行排序。由于某些原因,column_default_sort = 'pizza_id'对列表进行排序,但是column_sortable_list = ('pizza_id',)不起作用

这是目前的样子

我想要的是Pizza表头是蓝色的,就像Id的表头一样,这意味着它可以单击它并将按该列排序。下面给出一个例子

这是我的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)

这是我的flask-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('/')

非常感谢您的帮助,如果您需要更多信息,请询问。

参考方案

使用点分关系属性。例如按披萨名称或打顶名称排序:

class MyModelView(ModelView):

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

将单个str字符转换为整数并将其保存在列表中时出错 - python

这是导致坐标初始化错误的代码:self.estate = "x" def set_estate(self, estate): self.estate = estate self.table[coordinate_line][coordinate_column].set_estate("!") 我收到此错误:list i…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

如何克隆或复制列表? - python

在Python中克隆或复制列表有哪些选项?使用new_list = my_list时,对new_list的任何修改每次都会更改my_list。为什么是这样? python参考方案 使用new_list = my_list,实际上没有两个列表。分配只是将引用复制到列表,而不是实际列表,因此new_list和my_list都在分配后引用同一列表。要实际复制列表,…

如何将python列表发布到django - python

我设置了一个网站,可以从JSON列表中获取一些JSON列表,但是我使它在控制台中运行,该代码将过滤掉传感器的“关闭”状态,但是我不知道如何在Django上发布历史记录传感器的停机时间列表。我试图用下面的代码发布数据,但是我什至无法加载该站点,它仍然加载127.0.0.1from django.shortcuts import render from djan…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…