我需要应用一个基于父字段的筛选器,即,我需要在Shift
模型(子(的模型视图中按Driver
的name
(父(进行筛选。这些是我的型号:
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
中应用Driver
的name
的过滤器。我想添加一个自定义过滤器,但有更简单的方法可以实现吗?
这可以通过将"driver.name"
(父类(添加到模型视图的column_filters
:来实现
从flask_admin.contrb.sqla导入ModelView
类ShiftModelView(ModelView(:"quot"ModelView用于管理班次模型"quot">
...
column_filters = ["driver.name"]
...
注意,driver
引用了Shift
中Driver
的关系,而.
(点运算符(访问父类中的字段。