FLASK 删除父对象后无法删除对象
FLASK Can't delete an object after deleting it's parent
我有问题。
我正在为自己创建一个学校任务管理器。我希望当我删除作业时,与该作业关联的所有任务也被删除,但它不起作用。
代码如下:
这是 class 课业任务和课业:
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)
我真的希望你能帮助我...
我知道这个论坛里有一个类似的 post,但即使这样也不起作用。
尝试将您的 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)
我有一个与此非常相似的项目,上面删除父对象后删除对象的实现对我有用。
我有问题。
我正在为自己创建一个学校任务管理器。我希望当我删除作业时,与该作业关联的所有任务也被删除,但它不起作用。
代码如下:
这是 class 课业任务和课业:
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)
我真的希望你能帮助我...
我知道这个论坛里有一个类似的 post,但即使这样也不起作用。
尝试将您的 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)
我有一个与此非常相似的项目,上面删除父对象后删除对象的实现对我有用。