Python 在wtform submit上更新SQLAlchemy记录

Python 在wtform submit上更新SQLAlchemy记录,python,flask,sqlalchemy,wtforms,Python,Flask,Sqlalchemy,Wtforms,我在尝试更新具有以下关系的记录时遇到了一点问题: events_mentor_table = db.Table('events_mentors', db.Model.metadata, db.Column('event_id', db.Integer, ForeignKey('event.id')), db.Column('mentor_id', db.Integer, ForeignKey('mentor.id')) ) class Mentor(db.Model):

我在尝试更新具有以下关系的记录时遇到了一点问题:

events_mentor_table = db.Table('events_mentors', db.Model.metadata,
    db.Column('event_id', db.Integer, ForeignKey('event.id')),
    db.Column('mentor_id', db.Integer, ForeignKey('mentor.id'))
)

class Mentor(db.Model):
    __tablename__ = 'mentor'
    id = db.Column(db.Integer(), primary_key=True)
    first_name = db.Column(db.String())
    last_name = db.Column(db.String())
    job_title = db.Column(db.String())
    company_url = db.Column(db.String())
    twitter_url = db.Column(db.String())
    linkedin_url = db.Column(db.String())
    bio = db.Column(db.Text())

    def __str__(self):
        return '%s %s (%s)' % (self.first_name, self.last_name, self.job_title)


class Event(db.Model):
    __tablename__ = 'event'
    id = db.Column(db.Integer(), primary_key=True)
    date = db.Column(db.Date())
    start_time = db.Column(db.Time())
    end_time = db.Column(db.Time())
    title = db.Column(db.String())
    address = db.Column(db.String())
    description = db.Column(db.Text())
    mentors = relationship('Mentor', secondary=events_mentor_table)
@admin_events.route('/admin/events/<int:event_id>/', methods=['GET', 'POST'])
@login_required
def edit(event_id):
    event = Event.query.filter_by(id=event_id)
    form = EventForm(obj=event.one())
    if form.validate_on_submit():
        event.update(dict(**form.data))
        db.session.commit()
        flash("info updated", "success")
    return render_template('admin/events_edit.html', event=event.one(), form=form)
创建新条目时,我只需执行以下操作:

@admin_events.route('/admin/events/create/', methods=['GET', 'POST'])
@login_required
def create_new():
    form = EventForm()
    if form.validate_on_submit():
        event = Event(**form.data)
        db.session.add(event)
        db.session.commit()
        flash('successfully added new event', 'success')
    return render_template('admin/events_create_new.html', form=form)
这是正确的。在编辑时,我使用以下内容:

events_mentor_table = db.Table('events_mentors', db.Model.metadata,
    db.Column('event_id', db.Integer, ForeignKey('event.id')),
    db.Column('mentor_id', db.Integer, ForeignKey('mentor.id'))
)

class Mentor(db.Model):
    __tablename__ = 'mentor'
    id = db.Column(db.Integer(), primary_key=True)
    first_name = db.Column(db.String())
    last_name = db.Column(db.String())
    job_title = db.Column(db.String())
    company_url = db.Column(db.String())
    twitter_url = db.Column(db.String())
    linkedin_url = db.Column(db.String())
    bio = db.Column(db.Text())

    def __str__(self):
        return '%s %s (%s)' % (self.first_name, self.last_name, self.job_title)


class Event(db.Model):
    __tablename__ = 'event'
    id = db.Column(db.Integer(), primary_key=True)
    date = db.Column(db.Date())
    start_time = db.Column(db.Time())
    end_time = db.Column(db.Time())
    title = db.Column(db.String())
    address = db.Column(db.String())
    description = db.Column(db.Text())
    mentors = relationship('Mentor', secondary=events_mentor_table)
@admin_events.route('/admin/events/<int:event_id>/', methods=['GET', 'POST'])
@login_required
def edit(event_id):
    event = Event.query.filter_by(id=event_id)
    form = EventForm(obj=event.one())
    if form.validate_on_submit():
        event.update(dict(**form.data))
        db.session.commit()
        flash("info updated", "success")
    return render_template('admin/events_edit.html', event=event.one(), form=form)
WTForms提供了一个服务于此目的的

@login_required
def edit(event_id):
    event = Event.query.filter_by(id=event_id).one()
    form = EventForm(obj=event)
    if form.validate_on_submit():
        form.populate_obj(event)
        db.session.commit()
        flash("info updated", "success")
    return render_template('admin/events_edit.html', event=event.one(), form=form)
WTForms提供了一个服务于此目的的

@login_required
def edit(event_id):
    event = Event.query.filter_by(id=event_id).one()
    form = EventForm(obj=event)
    if form.validate_on_submit():
        form.populate_obj(event)
        db.session.commit()
        flash("info updated", "success")
    return render_template('admin/events_edit.html', event=event.one(), form=form)

谢谢你的帖子,我明天会检查并告诉你结果。我知道这是一个简单的解决方案,只是想说声谢谢。工作得很好。我本以为我已经试过了,但没有成功,所以我要花很长时间才能再尝试一次。对我来说效果非常好。谢谢。谢谢你的帖子,我明天会检查并告诉你结果。我知道这是一个简单的解决方案,只是想说声谢谢。工作得很好。我本以为我已经试过了,但没有成功,所以我要花很长时间才能再尝试一次。对我来说效果非常好。谢谢。