Форум сайта python.su
Модели такие:
class Role(db.Model, RoleMixin): id = db.Column(db.Integer(), primary_key=True) name = db.Column(db.String(80), unique=True) description = db.Column(db.String(255)) def __str__(self): return self.name roles_users = db.Table( 'roles_users', db.Column('user_id', db.Integer(), db.ForeignKey('user.id')), db.Column('role_id', db.Integer(), db.ForeignKey('role.id')) ) class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) first_name = db.Column(db.String(255)) last_name = db.Column(db.String(255)) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='select')) def __str__(self): return self.email
class FilterRole(filters.BaseSQLAFilter): def apply(self, query, value, alias=None): search = [] for val in value.split(','): search.append(self.column.ilike(f'%{val}%')) #в self.column он не видит просто строку 'roles.name' return query.filter(or_( *search )) def operation(self): return 'custom_filter'
column_filters = ( FilterRole( 'roles.name', 'Roles' ), # 'roles.name', # а если так, то дефолтные фильтры работают )
Отредактировано alexbadaloff (Авг. 28, 2020 21:36:18)
Офлайн
Это заработало
class FilterRole(filters.BaseSQLAFilter): def apply(self, query, value, alias=None): search = [] for val in value.split(','): search.append(Role.name.ilike(f'%{val}%')) return query.join(User.roles).filter(or_( *search )) def operation(self): return 'regexp'
Отредактировано alexbadaloff (Авг. 28, 2020 23:01:31)
Прикреплённый файлы:
Screenshot 2020-08-28 at 21.33.29.png (140,7 KБ)
Офлайн