Фильтрация значений столбцов в flask-admin с отношением один ко многим - PullRequest
0 голосов
/ 23 мая 2019

Я использую flask-admin для создания интерфейса администратора.В моей админ-панели у меня есть 2 таблицы, первая из которых - местоположения, а другая - требования, которые имеют отношение один ко многим с местоположением.Я пытаюсь отфильтровать поле со списком местоположений в моей форме требований, чтобы пользователи могли выбирать только активные, но я не мог управлять им.Является ли это возможным?если да, как я могу это сделать.

Я пытался сделать это с помощью form_ajax_refs, но мне не удалось.

class Location(db.Model):
    __tablename__ = 'Locations'
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    active = db.Column(db.Boolean)

class Demand(db.Model):
    __tablename__ = 'Demands'
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    delivery_from_id = db.Column(db.Integer, db.ForeignKey('Locations.id'))
    delivery_from = db.relationship(Location,
                                    backref=db.backref('demands_from', lazy='dynamic'),
                                    foreign_keys=[delivery_from_id],
                                    )

class DemandView(ModelView):
        form_ajax_refs = {
            'delivery_from': QueryAjaxModelLoader('delivery_from', db.session, Location, fields=['name', 'active'],
                                                  filters=["active=True"]),
        }

admin.add_view(ModelView(Location, db.session, 'Locations'))
admin.add_view(DemandView(Demand, db.session, 'Demands'))

1 Ответ

1 голос
/ 24 мая 2019

После долгих поисков, наконец, я нашел ответ. Вместо того, чтобы использовать form_ajax_refs, я использовал query_factory для выполнения фильтрации.

    class DemandView(ModelView):
        form_args = {
            'delivery_from': {
                'query_factory': lambda: Location.query.filter_by(
                    active=True
                )
            }
        }
...