[ad_1]
現在、ルート用に作成した関数で問題が発生しています
エラーの説明は次のとおりです – TypeError: edit() missing 1 required positional argument: ‘id_number’
@student_bp.route(‘/student/edit’, メソッド=[‘POST’,’GET’])
デフォルト編集 (id_number):
カーソル = mysql.connection.cursor()
cursor.execute(”’ SELECT * FROM 学生 WHERE school_id = %s ”’, (id_number,))
existing_data = cursor.fetchall()
データ = [tuple(data.values()) for data in existing_data]
フォーム = 学生フォーム()
form.validate_on_submit() の場合:
first_name = form.first_name.data
last_name = form.last_name.data
id_ = form.id.data
course_code = form.course_code.data
yr_level = フォーム.年.データ
性別 = form.gender.data
cur = mysql.connection.cursor()
cur.execute(”’ UPDATE 生徒 SET school_id = %s,
名 = %s、
姓 = %s、
コースコード = %s,
年 = %s、
性別 = %s
WHERE id_number = %s ”’,(id_, first_name, last_name, course_code, yr_level, 性別, id_number))
mysql.connection.commit()
flash(“学生が更新されました。成功しました!”, “成功”)
リダイレクトを返す(‘/学生’)
elif request.method == “GET”:
form.id.data = データ[0][0]
form.first_name.data = データ[0][1]
form.last_name.data = データ[0][2]
form.course_code.data = データ[0][3]
form.year.data = データ[0][4]
form.gender.data = データ[0][5]
form.submit.label.text = “更新”
return render_template(‘edit.html’,
title=”学生の更新”,
id_number=id_number,
フォーム=フォーム)
私が試したこと:
@student_bp.route('/student/edit', methods=['POST','GET']) def edit(id_number): cursor = mysql.connection.cursor() cursor.execute(''' SELECT * FROM student WHERE school_id = %s ''', (id_number,)) existing_data = cursor.fetchall() data = [tuple(data.values()) for data in existing_data] form = StudentForm() if form.validate_on_submit(): first_name = form.first_name.data last_name = form.last_name.data id_ = form.id.data course_code = form.course_code.data yr_level = form.year.data gender = form.gender.data cur = mysql.connection.cursor() cur.execute(''' UPDATE students SET school_id = %s, first_name = %s, last_name = %s, course_code = %s, year = %s, gender = %s WHERE id_number = %s ''',(id_, first_name, last_name, course_code, yr_level, gender, id_number)) mysql.connection.commit() flash("Student has been updated, successfully!", "success") return redirect('/student') elif request.method == "GET": form.id.data = data[0][0] form.first_name.data = data[0][1] form.last_name.data = data[0][2] form.course_code.data = data[0][3] form.year.data = data[0][4] form.gender.data = data[0][5] form.submit.label.text = "Update" return render_template('edit.html', title = 'Update Student', id_number=id_number, form=form)
解決策 1
それはそのコードではなく、そのコードを呼び出すコードにあります。
の edit
質問で定義したメソッドには、というローカル変数に格納されているパラメーターが必要です id_number
内部でのみアクセスできます edit
メソッド自体。 メソッドを呼び出すときは、その変数にロードされる引数を指定する必要があります。
edit(666)
または
edit("Hello world")
多分。
次のように呼び出す場合:
edit()
次に、その引数を提供しないと、システムは正しく不平を言います。
解決策 2
編集テンプレートには次のようなものが必要です。
<form action="{{ url_for('edit', id_number=post['id_number']) }}" method="post"> // ^ item to be sent to the edit method
ただし、テンプレートを表示していないため、これは当て推量です。
[ad_2]
Source link
コメント