gpt4 book ai didi

python - Flask-WTF model_form、Sqlalchemy 和外键

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:57 25 4
gpt4 key购买 nike

我正在尝试采用我的模型并使用 wtform 的 model_form 为 sqlalchemy 生成表单。我希望具有外键约束的字段是该表中所有项目的选择列表。

到目前为止,对于文字外键,我要么一无所获,要么得到一个简单的文本输入,我有点迷路了。

好的,所以我这里有一个相对简单的数据模型。为此,我可以将其减少到我拥有的硬件类型及其支持状态的位置。我希望将来能够添加支持状态,并为它们提供更有用的描述。

from . import db
class Status(db.Model):
"""Support status"""
__tablename__ = 'status'
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(64), unique=True)
description = db.Column(db.Text)
def __repr__(self):
return self.name

class Hardware(db.Model):
"""Hardware"""
__tablename__ = 'hardware'
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(64), unique=True)
description = db.Column(db.Text)
status = db.Column(db.Integer, db.ForeignKey('status.id'))
...
def __repr__(self):
return self.name

绝妙的。

现在我的 View 是这样的:

from flask import render_template, request, flash, redirect, url_for
from flask_wtf import Form
from wtforms.ext.sqlalchemy.orm import model_form
from . import db, app
import models
...
@app.route('/edit/status/', defaults={'id': None}, methods=['GET', 'POST'])
@app.route('/edit/status/<int:id>', methods=['GET', 'POST'])
def edit_hardware(id=None):
HardwareForm = model_form(models.Hardware, base_class=Form,
db_session=db.session, exclude_fk=False)
if id == None:
model = models.Hardware()
else:
model = models.Hardware.query.get(id)
form = HardwareForm(request.form, model)
if form.validate_on_submit():
form.populate_obj(model)
db.session.add(model)
db.session.commit()
flash("yay!")
return render_template('forms.html', form=form)

所以我显然已经尝试了 exclude_fk 操作,但这只是给了我一个整数文本字段。

我觉得我需要告诉一些事情来使用 Status 中的名称字段,尽管我猜这可能来自 repr 方法。

我是否需要删除 exclude_fk 并手动将 QuerySelectField 添加到表单?我应该在 field_args 中传递什么吗?我在做傻事吗?

我想在这里做尽可能少的人工干预,我觉得这是一个相当教科书般的场景。

最佳答案

Hardware.status 列应该命名为 Hardware.status_id 并且您应该向 Hardware 添加一个列来表示与状态表:

status = db.relationship('Status',backref='hardware',lazy='dynamic')

这应该让你得到一个带有状态选择的 model_form

关于python - Flask-WTF model_form、Sqlalchemy 和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28378431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com