如何根据url参数在flask_admin中设置关系字段的默认值?

问题描述 投票:2回答:2

假设我声明了以下模型:

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    addresses = db.relationship('Address', backref='person',
                                lazy='dynamic')

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    person_id = db.Column(db.Integer, db.ForeignKey('person.id'))

我想创建一个视图,用户可以在其中查看和添加Person对象的详细信息。我想要一个按钮来添加一个类似于的地址:

<a href='{{ url_for('address.create_view',person=get_value(model,'id'))}}' class='btn'>Add</a>

现在我的问题是如何将person_id设置为发送的值?理想情况下,我想隐藏人员下拉窗口小部件并将其转换为隐藏字段并发送值。但我会满足于从地址表格中的人员下拉列表中选择正确的人。

谢谢。

flask flask-admin
2个回答
3
投票

你可以覆盖你的create_formModelView方法:

class PersonView(ModelView):
    def create_form(self):
        form = super(PersonView, self).create_form()
        person_id = request.args.get('person_id')
        if person_id and not form.person_id.data:
            form.person_id.data = person_id
        return form

-1
投票

您可以在视图中添加一个额外的列,并为此列添加格式化程序。例如:

class PersonView(ModelView):
    column_list = ('id', 'name', 'action')
    column_formatters = {'action': format_action}

# define the formatter
def format_action(view, context, model, name):
    person_id = model.id
    return "your html with person ID: %s" % person_id

请阅读doc

© www.soinside.com 2019 - 2024. All rights reserved.