Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Flask-Admin relationship many-to-many создать свой filter или search [решено] [RSS Feed]

#1 Авг. 28, 2020 20:51:38

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Flask-Admin relationship many-to-many создать свой filter или search [решено]

Модели такие:

 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'

Пытаюсь указать поле roles но фильтр не знает как его в column преобразовать

 column_filters = (
        FilterRole(
            'roles.name', 'Roles'
        ),
        # 'roles.name', # а если так, то дефолтные фильтры работают
    )

Как свой фильтр заставить работать с этим полем?



————————–
Истина где-то рядом

Отредактировано alexbadaloff (Авг. 28, 2020 21:36:18)

Офлайн

#2 Авг. 28, 2020 21:34:56

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Flask-Admin relationship many-to-many создать свой filter или search [решено]

Это заработало

 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)

Прикреплённый файлы:
attachment Screenshot 2020-08-28 at 21.33.29.png (140,7 KБ)

Офлайн

  • Начало
  • » Web
  • » Flask-Admin relationship many-to-many создать свой filter или search [решено][RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version