烧瓶管理员:为父字段添加过滤器



我需要应用一个基于父字段的筛选器,即,我需要在Shift模型(子(的模型视图中按Drivername(父(进行筛选。这些是我的型号:

import datetime
from sqlalchemy import Integer, DATE, ForeignKey, Column, String
from sqlalchemy.orm import registry, declarative_mixin, declared_attr

mapper_registry = registry()
@declarative_mixin
class Basic:
@declared_attr
def __sa_dataclass_metadata_key__(cls):
return "sa"
@declared_attr
def __tablename__(cls):
return snakecase(cls.__name__)

@mapper_registry.mapped
@dataclass
class Driver(Basic):  # parent
id: int = field(init=False, metadata=dict(sa=Column(Integer, autoincrement=True, unique=True, primary_key=True, nullable=False)))
name: str = field(metadata=dict(Column(String(255), nullable=False)))

@mapper_registry.mapped
@dataclass
class Shift(Basic):  # child
id: int = field(init=False, metadata=dict(sa=Column(Integer, autoincrement=True, unique=True, primary_key=True, nullable=False)))
date: datetime.date = field(metadata=dict(sa=Column(DATE, nullable=False)))
driver_id: int | None = field(metadata=dict(sa=Column(Integer, ForeignKey('driver.id'), nullable=True)))

driver: Driver | None = field(metadata=dict(sa=lambda: relationship('Driver', lazy=False)))

这是我对Shift模型的模型视图:

from flask_admin.contrib.sqla import ModelView
class ShiftModelView(ModelView):
"""ModelView to manage Shift model."""
form_columns = ["id", "date"]
form_widget_args = {"id": {"disabled": True}}
column_list = [
"id",
"date",
]
column_searchable_list = ["id", "date"]

我需要在模型视图ShiftModelView中应用Drivername的过滤器。我想添加一个自定义过滤器,但有更简单的方法可以实现吗?

这可以通过将"driver.name"(父类(添加到模型视图的column_filters:来实现

从flask_admin.contrb.sqla导入ModelView

类ShiftModelView(ModelView(:"quot"ModelView用于管理班次模型"quot">

...
column_filters = ["driver.name"]
...

注意,driver引用了ShiftDriver的关系,而.(点运算符(访问父类中的字段。

最新更新