Untitled

mail@pastecode.io avatar
unknown
python
a month ago
5.4 kB
3
Indexable
Never
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