Untitled
class CarImage(db.Model): id = db.Column(db.Integer, primary_key=True) car_id = db.Column(db.Integer, db.ForeignKey('car.id')) image_url = db.Column(db.String(100)) class ImageForm(FlaskForm): image = FileField(validators=[ FileAllowed(['jpg', 'png'], 'Только изображения!') ]) class CarView(ModelView): form_columns = [ 'city', 'name', 'url', 'brand', 'model', 'drive', 'car_class', 'fuel_type', 'country', 'transmission', 'color', 'seats', 'state_number', 'engine_volume', 'horsepower', 'gearbox_type', 'max_speed', 'fuel_consumption', 'dimensions', 'fuel_brand', 'fuel_tank_volume', 'trunk_volume', 'year', 'mileage', 'interior', 'has_air_conditioning', 'has_tinting', 'color_description', 'vin', 'registration_certificate', 'short_description', 'detailed_description', 'primary_image', 'price_1_day', 'price_2_5_days', 'price_6_15_days', 'price_16_29_days', 'price_30_days', 'with_driver', 'driver_price_3_hours', 'driver_price_3_6_hours', 'driver_price_7_12_hours', 'driver_price_13_hours', 'purchase_price', 'deposit', 'meta_title', 'meta_keywords', 'meta_description', 'is_hidden', 'is_not_counted', 'is_not_rented', 'is_in_repair', 'no_contract_print', 'is_not_shown_to_customers', 'always_occupied', 'occupied_until', 'occupied_days_ahead', 'owner_id', 'owner', 'additional_cities' ] form_extra_fields = { 'primary_image': ImageUploadField('Основное изображение', base_path='/var/www/caes_usr/data/www/car/img/car/', url_relative_path='/img/car/', validators=[FileAllowed(['jpg', 'png'], 'Только изображения!')]), 'additional_image_1': ImageUploadField('Дополнительное изображение 1', base_path='/var/www/cars_usr/data/www/car/img/car/', url_relative_path='/img/car/', validators=[FileAllowed(['jpg', 'png'], 'Только изображения!')]), 'additional_image_2': ImageUploadField('Дополнительное изображение 2', base_path='/var/www/cart_es_usr/data/www/car/img/car/', url_relative_path='/img/car/', validators=[FileAllowed(['jpg', 'png'], 'Только изображения!')]) } def on_model_change(self, form, model, is_created): try: # Обработка основного изображения if form.primary_image.data: file_data = form.primary_image.data filename = secure_filename(file_data.filename) file_path = os.path.join(self.get_save_path(), filename) file_data.save(file_path) model.primary_image = filename # Сохраняем только имя файла в модели # Обработка первого дополнительного изображения if form.additional_image_1.data: file_data = form.additional_image_1.data filename = secure_filename(file_data.filename) file_path = os.path.join(self.get_save_path(), filename) file_data.save(file_path) # Здесь вам нужно обновить модель со ссылкой на это изображение # Например: model.additional_image_1 = filename # Обработка второго дополнительного изображения if form.additional_image_2.data: file_data = form.additional_image_2.data filename = secure_filename(file_data.filename) file_path = os.path.join(self.get_save_path(), filename) file_data.save(file_path) # Обновите модель со ссылкой на второе изображение # Например: model.additional_image_2 = filename # Если в модели есть другие поля, которые необходимо обновить, добавьте здесь # ... # Сохранение изменений в базе данных db.session.commit() except Exception as e: # Логирование ошибки и откат транзакции logger.error(f'Ошибка при обработке изображений: {e}') db.session.rollback() raise e class CarForm(FlaskForm): city = SelectField('Город', choices=[('city1', 'Город 1'), ('city2', 'Город 2')]) name = StringField('Название', validators=[DataRequired()]) url = StringField('URL') primary_image = FileField('Основное изображение', validators=[ FileRequired(), FileAllowed(['jpg', 'png'], 'Только изображения!') ]) additional_images = FileField(FormField(ImageForm), min_entries=1) submit = SubmitField('Добавить авто')
Leave a Comment