hap*_*oat 18 python flask wtforms flask-sqlalchemy flask-wtforms
我的应用程序使用Flask,Flask-SQLAlchemy,Flask-WTF和Jinja2的组合.
在目前的版本中,我有一个设置表.该表只有一个记录,包含一个字段.最初该表包含零记录.
我想要实现的是:
这是我的代码:
models.py
class Provider(db.Model):
id = db.Column(db.Integer, primary_key = True)
rssfeed = db.Column(db.String(120), unique = True)
def __init__(self, rssfeed):
self.rssfeed = rssfeed
def __repr__(self):
return '<NZBMatrix feed url %r>' % self.rssfeed
Run Code Online (Sandbox Code Playgroud)
forms.py
class SettingsForm(Form):
rssfeed = TextField('rssfed', validators= [Required()])
Run Code Online (Sandbox Code Playgroud)
views.py
@app.route('/settings', methods=["GET","POST"])
def settings():
""" show settings """
provider = Provider.query.get(1)
form = SettingsForm(obj=provider)
print provider
if request.method == "POST" and form.validate():
if Provider.query.get(1) is None:
provider = Provider(rssfeed=form.rssfeed.data)
form.populate_obj(provider)
db.session.add(provider)
db.session.commit()
flash("Settings added")
return render_template("settings.html", form=form)
Run Code Online (Sandbox Code Playgroud)
目前,如果该代码不存在但该rssfeed列为空,则此代码会创建一条记录.
我如何更改此代码,以便INSERT在记录不存在时将其更改UPDATE?
cod*_*eek 31
一旦您的表单被验证等,
要添加新记录:
new_provider = Provider(form.rssfeed.data)
db.session.add(new_provider)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
要更新现有记录:
existing_provider = Provider.query.get(1) # or whatever
# update the rssfeed column
existing_provider.rssfeed = form.rssfeed.data
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
更新的技巧是你只需要更改特定字段并进行提交.数据库会话处理休息.我认为您正在使用现在在SQLAlchemy中弃用的合并函数.
我已经设法解决了对view.py文件进行这些更改的问题:
@app.route('/settings', methods=["GET","POST"])
def settings():
""" show settings """
provider = Provider.query.get(1)
form = SettingsForm(request.form,obj=provider)
if request.method == "POST" and form.validate():
if provider:
provider.rssfeed = form.rssfeed.data
db.session.merge(provider)
db.session.commit()
flash("Settings changed")
return redirect(url_for("index"))
else:
provider = Provider(form.rssfeed.data)
db.session.add(provider)
db.session.commit()
flash("Settings added")
return redirect(url_for("index"))
return render_template("settings.html", form=form)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27844 次 |
| 最近记录: |