この型エラーを修正するにはどうすればよいですか: edit() 必要な位置引数が 1 つありません: ‘id_number’


現在、ルート用に作成した関数で問題が発生しています
エラーの説明は次のとおりです – 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

編集テンプレートには次のようなものが必要です。

HTML
  <form action="{{ url_for('edit', id_number=post['id_number']) }}" method="post">
//                                  ^ item to be sent to the edit method

ただし、テンプレートを表示していないため、これは当て推量です。



Source link

コメント

タイトルとURLをコピーしました