我有問題。
我正在為自己創建一個學校任務管理器。我希望當我洗掉一項作業時,與該作業關聯的所有任務也被洗掉,但它不起作用。
這是代碼:
這是功課任務和功課的課程:
class Sw_task(db.Model):
id = db.Column(db.Integer, primary_key=True)
task = db.Column(db.String(200), nullable=False)
date_created = db.Column(db.DateTime(), default=datetime.now())
duedate = db.Column(db.DateTime())
details = db.Column(db.String(200))
user = db.Column(db.String())
sw = db.Column(db.Integer(), default=0)
course = db.Column(db.Integer())
sw_id = db.Column(db.Integer, db.ForeignKey('schoolwork.id', ondelete="CASCADE"))
class Schoolwork(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(), nullable=False)
value = db.Column(db.Integer())
team = db.Column(db.Integer(), default = 0 )
time = db.Column(db.Integer())
part = db.Column(db.String(500))
user = db.Column(db.String())
duedate = db.Column(db.DateTime())
course = db.Column(db.Integer(), default=0)
other_infos = db.Column(db.String())
tasks = db.relationship("Sw_task", backref="schoolwork", passive_deletes=True, cascade='all, delete', lazy=True)
下面是創建任務的代碼:
@app.route("/sw/<int:id>", methods=["GET", "POST"])
@login_required
def schoolwork_ind(id):
global now
schoolwork_current = Schoolwork.query.get(id)
sw_id = schoolwork_current.id
sw_tasks = Sw_task.query.all()
course_id = id
due_date = schoolwork_current.duedate.date()
due_in = (due_date - now).days
from_course = Course.query.get(id)
course_id = from_course.id
user = current_user.email
print(course_id)
if request.method=="POST" and "taskname" in request.form:
print(user)
task=request.form["taskname"]
dated = request.form['duedate']
date_goodsize = dated.replace("-", "/")
sw_course = from_course
due = datetime.strptime(date_goodsize,"%Y/%m/%d" )
details = request.form['details']
new_task = Sw_task(sw_id=sw_id, course=course_id,task=task, duedate=due, user=user, sw=sw_id, details=details)
db.session.add(new_task)
db.session.commit()
redirect_link = "/sw/" str(sw_id)
return redirect(redirect_link)
return render_template("schoolwork.html", sw = schoolwork_current, course=from_course, swtasks=sw_tasks, now=now, duein=due_in)
這是洗掉作業的代碼:
@app.route('/delete/sw/<int:id>', methods=["GET", "POST"])
def delete_sw(id):
to_delete = Schoolwork.query.get_or_404(id)
redirect_var = "/schoolworks"
try:
db.session.delete(to_delete)
db.session.commit()
except:
return"There has been a problem. Please try again"
return redirect(redirect_var)
我真的希望你能幫助我...
我知道在這個論壇上有一個類似的帖子,但即使這樣它也不起作用。
uj5u.com熱心網友回復:
嘗試將您的Sw_task.sw_id列修改為:
sw_id = db.Column(db.Integer, db.ForeignKey('schoolwork.id'))
另外,將您的Schoolwork.tasks列更改為:
tasks = db.relationship("Sw_task", backref="schoolwork", cascade='all, delete', lazy=True)
我有一個與此非常相似的專案,上面洗掉父物件后洗掉物件的實作對我有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/355661.html
標籤:Python 数据库 烧瓶 sqlalchemy
