如何更新Flask中的表SQLAlchemy?

2024-09-29 10:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

为了添加任务,我做了:

task = TaskList(task_name=form_add_task.task_name.data, doer=current_user) db.session.add(task) db.session.commit()

现在,用户和任务有一对多的关系。我试图在UI中为特定用户的每个任务显示复选框(task\u status列)。如果用户选中复选框(可以是一个或多个)并单击“更新”按钮,我想通过更新将任务状态更改为1

如果特定用户选中一个或多个复选框,如何将其任务状态更新为1

型号.py

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, nullable=False, index=True)
    email = db.Column(db.String(120), unique=True, nullable=False, index=True)
    password_hash = db.Column(db.String(128))
    last_seen = db.Column(db.DateTime, default=datetime.utcnow)
    tasks = db.relationship('TaskList', backref='doer', lazy='dynamic')

class TaskList(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    task_name = db.Column(db.String(140), nullable=False)
    task_status = db.Column(db.Integer, default=0)
    date_created = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

表单.py

class AddTaskForm(FlaskForm):
    task_name = StringField('task', validators=[DataRequired()])
    add_task_submit = SubmitField('Add Task')

class UpdateTaskForm(FlaskForm):
    task_status = BooleanField()
    update_task_submit = SubmitField('Update Task')

路线.py

@app.route('/mytask', methods=['POST', 'GET'])
@login_required
def my_task():
    form_add_task = AddTaskForm()
    form_update_task = UpdateTaskForm()
    if form_add_task.validate_on_submit():
        task = TaskList(task_name=form_add_task.task_name.data, doer=current_user)
        db.session.add(task)
        db.session.commit()
    user = User.query.filter_by(username=current_user.username).first()
    task_list = user.tasks.filter_by(task_status=0)

    if form_update_task.validate_on_submit():
        if form_update_task.task_status.data is True:
        **HOW DO I UPDATE THE CHECKBOXES**

    return render_template('my_task.html', title='my tasks',
                           form_add_task=form_add_task,
                           form_update_task=form_update_task,
                           task_list=task_list,
                           user=user
                           )

Tags: 用户nameformaddidtruetaskdb
1条回答
网友
1楼 · 发布于 2024-09-29 10:24:31

首先,您需要更新任务表单中的一些内容来标识您的任务。现在,对象只有一个布尔字段,但它无法告诉flask或sql alchemy应该更新哪个任务。因此,我会在更新表单中添加task.id或者按照您的逻辑添加task.task_name字段

class UpdateTaskForm(FlaskForm):
    #task_id = IntegerField(#add relevant params here#)
    task_name = StringField('task', validators=[DataRequired()])
    task_status = BooleanField()
    update_task_submit = SubmitField('Update Task')

之后,我将使用task.idtask.task_name字段从数据库中获取需要更新的任务,将task_status字段设置为1并将其持久化

task = TaskList.query.filter_by(id=form_update_task.id).first()
# or
# task = TaskList.query.filter_by(task_name=form_update_task.name).first()
if task is not None:
    task.task_status = 1
    db.session.add(task)
    db.session.commit()

相关问题 更多 >