@alexeyolsh213

Как сделать добавление фотографий в разном количестве для товара?

Нужна помощь с python flask.

У меня есть класс таблицы
class Products(db.Model):
    __tablename__ = "products"
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(80), nullable = False)
    description = db.Column(db.Text, nullable = False)
    price = db.Column(db.Integer, nullable = False)
    type = db.Column(db.Integer, nullable = False)
    photo_1 = db.Column(db.String(100), nullable = False)
    photo_2 = db.Column(db.String(100), nullable = True, default = None)
    photo_3 = db.Column(db.String(100), nullable = True, default = None)
    photo_4 = db.Column(db.String(100), nullable = True, default = None)
    photo_5 = db.Column(db.String(100), nullable = True, default = None)
    date = db.Column(db.Date, default = datetime.datetime.utcnow())

    def __init__(self, name, description, type, price, photo_1):
        self.name = name
        self.description = description
        self.price = price
        self.type = type
        self.photo_1 = photo_1


В нём есть 5 полей с фотографиями, но только одно обязательно для заполнения. Мне нужно, что бы для одного товара было максимум 5 фото. Пользователь может выбрать любое количество фото от 1 до 5. Во время добавления нового товара мне нужно узнать, сколько фотографий решил добавить пользователь.

Я написал такой код. Добавление товаров в БД в нём ещё не написано.

@app.route("/admin/add-product", methods = ["POST", "GET"])
def add_product():
    if request.method == "POST":
        name = request.form["product_name"]
        price = request.form["product_price"]
        description = request.form["product_description"]
        files = request.files.getlist("product_photos")
        type = request.form["product_type"]

        description = description.replace("\n", "<br>")
        photos = []

        for file in files:
            if file and allowed_file(file.filename):
                lastRow = UsersPhotos.query.order_by(UsersPhotos.id.desc()).first()
                nameParts = file.filename.rsplit(".", 1)
                fileName = file.filename

                if lastRow != None:
                    fileName = f"photo_{lastRow.id + 1}.png"
                else:
                    fileName = f"photo_1.png"

                userPhoto_object = UsersPhotos(name = fileName, path = app.config['UPLOAD_FOLDER'] + fileName)
                db.session.add(userPhoto_object)
                db.session.commit()
                    
                file.save(os.path.join(app.config["UPLOAD_FOLDER"], fileName))

                photos.append(fileName)
            else:
                flash("Неверное расширение какого-то из файлов")

        return redirect(request.url)

    return render_template("admin/add_product.html")


1. В списке photos, как я написал ранее, может быть от 1 до 5 элементов. Есть другой вариант, кроме как проверять наличие индекса в списке и после этого уже делать вывод, что элемент есть (или нет) и добавлять его в бд?
2. Класс таблицы Products написан верно, или можно как то написать более по умному?
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы