本人刚接触flask,只是看了一个例子 一个页面编辑一个数据库表,但我有这样两个表 t_a t_b 其中 t_b 的外键是t_a的主键 t_a t_b是一对多的关系,我想在编辑 t_a某一行时候可以在同一个页面添加n个t_b的行,请问这样 flask admin怎么实现 ?
1条回答 默认 最新
你知我知皆知 2024-08-03 03:12关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
要使用Flask-Admin管理多个关联表,您需要创建一个新的模型类来表示这些表之间的关系。然后,在Flask-Admin的
View类中,您可以使用relationship属性来引用这些表。以下是一个简单的示例:
- 首先,确保安装了Flask和Flask-Admin库:
pip install Flask Flask-admin- 创建您的数据模型(
db.py)以定义两个表:
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=True) class Tb(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # other fields... user = db.relationship('User', backref=db.backref('tb', lazy='dynamic'))- 然后,在您的应用中导入并初始化SQLAlchemy:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' db.init_app(app)- 在您的视图文件中,创建一个新视图,其中包含两个表的模型,并使用Flask-Admin的
view_class参数定义如何显示这两个表:
from flask_admin import Admin from .models import User, Tb admin = Admin(app, name='My App') class TbAdmin(Admin.View): @admin.is_accessible_by_default() def is_accessible(self): return True def is_visible(self): return True def is_moderator_only(self): return False def _prepare_url_for_js_template(self): return '%s/%s' % (self.model._meta.db_table, self.model._get_pk_val()) def is_accessible(self): if not current_user.is_authenticated: flash("Please log in to access this page.", "warning") return False if not current_user.can('add'): flash("You do not have permission to add new records.", "warning") return False return super(TbAdmin, self).is_accessible() def _prepare_url_for_js_template(self): return '%s/%s' % (self.model._meta.db_table, self.model._get_pk_val()) def index(self): return render_template('index.html', model=Tb, title='Tb') admin.add_view(TbAdmin(Tb))- 最后,在您的模板(例如
templates/index.html)中添加一个按钮,用于从另一个页面添加新条目:
<button class="btn btn-primary" onclick="window.location.href='/admin/tb/add/'">Add a new TB</button>现在,当用户点击添加按钮时,他们将被重定向到添加TB的新页面。每个TB条目的编辑页将自动包含当前选择的TB条目作为默认值。这允许您在一个页面上管理两个表。
如果您想为特定的
Tb条目添加额外的功能或行为,只需相应地修改TbAdmin类即可。解决 无用评论 打赏 举报