Moja aplikacja używa kombinacji kolby, kolby-SQLAlchemy, Flask-WTF i Jinja2.Flask-SQLAlchemy: Jak warunkowo wstawić lub zaktualizować wiersz
W obecnym wcieleniu mam tabelę ustawień. Tabela będzie miała tylko jeden rekord z jednym polem. Początkowo tabela zawiera zero rekordów.
Co chcę osiągnąć jest:
- Biorąc pod uwagę, że nie istnieją wpisy w db, a następnie pokazać pusty formularz gotowy do wejścia użytkownika
- Zważywszy, że istnieje wpis, pokazać wpis, a
- jeśli użytkownik zmieni wartość, zaktualizuj rekcję w db.
Oto mój kod:
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
forms.py
class SettingsForm(Form):
rssfeed = TextField('rssfed', validators= [Required()])
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)
W obecnej postaci kod tworzy rekord, jeśli nie istnieje, ale kolumna rssfeed
jest pusta.
Jak mogę zmienić ten kod tak, aby był INSERT
, jeśli rekord nie istnieje i UPDATE
, jeśli tak się stanie?
Po prostu dla FYI - 'form.validate' powinno być' form.validate() '- funkcja jest zawsze pełna prawdy, ale twoja forma * może * nie przejdzie walidacji. –
Dzięki za wskazanie tego! – happygoat