UnboundLocalError Python-колба

Возникла ошибка UnboundLocalError, когда я пытаюсь запросить категорию из таблицы категорий, присутствующей в базе данных mysql. UnboundLocalError: локальная переменная 'category', на которую была сделана ссылка перед назначением. Я пытаюсь добавить продукт по таблице базы данных product. Мне нужно выбрать категорию этого продукта из таблицы категорий. Для этого я использую query.all (). Это apps.py

      @app.route('/AddProduct',methods=["GET", "POST"])
def add_product():
    if request.method =="POST":
        name=request.form['name']
        price=request.form['price']
        description = request.form['description']
        category = categories.query.all()
        image = request.files['image']
        if image and allowed_file(image.filename):
            filename = secure_filename(image.filename)
            image.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        #cursor = mysql.connection.cursor()
        #cursor.execute('SELECT * FROM categories')
        #account = cursor.fetchall()
        cursor.execute('INSERT INTO products VALUES(NULL,% s,% s,% s,% s,% s)',(name,price,description,image,categoryId))
        mysql.connection.commit()
    return render_template('Shopping.html',category=category)

Это мой файл shopping.html

      <!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Admin</title>
  </head>
  <body>
      <form action="/home" method="POST" enctype="multipart/form-data" class="register-form" id="register-form">
        <input type="text" name="name" id="name" placeholder="Product Name"/>
        <input type="" name="price" id="price" placeholder="price"/>
        <input type="text" name="description" id="description" placeholder="description"/>
         <input type="file" name="image"><br>
         <label for="category">ADD catogory</label>
         <select name="category" id="category" class="form-control" required>
           <option value="">Select a category</option>
           {% for cat in category %}
           <option value="cat.categoryId">{{cat.categoryName}}</option>
           {% endfor %}

         <input type="submit">
      </form>

1 ответ

Это потому, что эта строка:

      category = categories.query.all()

выполняется только при выполнении запроса POST. Когда вы загружаете страницу в первый раз (GET), переменная category не инициализирован.

Вы можете просто переместить эту строку в начало процедуры add_product из if блокировать.

Другие вопросы по тегам