Untitled
unknown
python
2 years ago
5.4 kB
9
Indexable
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('Добавить авто')
Editor is loading...
Leave a Comment