如何解决如何正确使用新值更新外键?
我一直在尝试建立一个网络来检查学生的出勤率。我的目标是在网页上获取一间教室的学生名单
用户类别:
class User(db.Model,UserMixin):
id = db.Column(db.Integer,primary_key=True)
email = db.Column(db.String(80),unique=True,nullable=False)
name = db.Column(db.String(20),nullable=False)
password = db.Column(db.String(60),nullable=False)
image_file = db.Column(db.String(20),nullable=False,default='default.jpg')
occupation = db.Column(db.String(20),nullable=False)
year = db.Column(db.String(20),nullable=False)
classroom = db.Column(db.Integer,db.ForeignKey('classroom.id'))
posts = db.relationship('Post',backref='author',lazy=True)
def __repr__(self):
return f"User('{self.email}','{self.name}','{self.image_file}')"
教室课:
class Classroom(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(20),nullable=False)
description = db.Column(db.String(80))
users = db.relationship('User',backref='user',lazy=True)
@classmethod
def get_classroom(cls):
classroom_list = Classroom.query.all()
return [(classroom.id,classroom.name) for classroom in classroom_list]
def __repr__(self):
return f"Classroom('{self.name}','{self.description}')"
但是,由于最初并未创建教室,因此实际上没有向学生提供有关其教室的外键,然后默认将其设置为Null。
因此,我打算通过仅从使用HTML的下拉列表中选择一个选项来更新外键,但是我找不到合适的解决方案,因此决定尝试另一种方法。现在已经创建了一个新表单,然后在网页上看起来还不错。但是该代码实际上在内部无法正常运行,并带来了一些问题。
表格:
class SelectClassroomForm(FlaskForm):
name = StringField('Name')
year = StringField('Year')
classroom = SelectField('Classroom',choices=Classroom.get_classroom(),)
submit = SubmitField('Add')
尝试更新外键:
@app.route("/students",methods=['GET','POST'])
@login_required
def students():
form = SelectClassroomForm()
students = User.query.filter(User.year != "I'm not a Student")
if form.validate_on_submit():
students.classroom = form.classroom.data[0]
db.session.commit()
flash('Successfully Added classroom info to students','success')
return redirect(url_for('students'))
else:
flash("something's wrong",'danger')
return render_template('students.html',students=students,form=form)
我不确定是上方的代码还是下方的HTML代码阻止了我更新密钥。
{% extends "layout.html" %}
{% block content %}
<h2>Student List</h2>
<div class="content-section">
<div class="table-responsive">
<table id="mytable" class="table table-bordered table-striped">
<thead>
<th> Name </th>
<th> Year </th>
<th> Classroom </th>
</thead>
<tbody>
{% for student in students %}
<tr>
<td> {{ student.name }} </td>
<td> {{ student.year }} </td>
<td>
<form method="POST" action="">
{{ form.classroom(class="form-control form-control-sm") }}
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<a class="btn btn-primary btn-sm mt-1 mb-1" href="{{ url_for('students') }}">Update</a>
</div>
{% endblock content %}
(很抱歉,我尝试查找方法后未着色的代码却在我自己的页面上失败了)
无论如何,这里的网页显示了应该的学生列表,但是当我单击“更新”按钮时,问题就出现了。我该如何解决,然后使用新的外键成功更新学生的信息?任何帮助将不胜感激,谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。