2016-08-05 6 views
0

У меня есть форму SQLFORM.factory с полем: Поле ('фото', 'upload', uploadfolder = os.path.join (request.folder, 'static/images/студенты/')),Web2py upload filename different in Static to database

при успешной загрузке вставляет имя файла в базу данных и сохраняет файл изображения в static/images/students/ db.student.insert (..., photo = request.vars.photo , ...)

Но когда я смотрю в базе данных имя файла хранится в виде: student.photo.9d313a71112989fe.706f7274726169742e706e67.png

Но в статических/изображений/студентов/она хранится как: student.photo.a8c742a692b9f60c.706f7274726169742e706e67.png

, что означает, когда я пытаюсь загрузить изображение в другой точке зрения, используя имя, хранящуюся в базе данных, изображение не может быть найдено.

Может ли кто-нибудь помочь мне сохранить имя базы данных так же, как имя файла в статике, чтобы я мог загружать только что загруженные изображения?

Спасибо всем.

ответ

0

Возможно, вы сохранили файл дважды - один раз в статической папке по вызову SQLFORM.factory и один раз в папке uploads (местоположение загрузки по умолчанию) по телефону db.student.insert. Каждый раз имя файла включает в себя уникальный случайный компонент, а конкретное имя файла, хранящееся в базе данных, является тем, которое генерируется вызовом db.student.insert, а не тем, которое было создано SQLFORM.factory.

Лучшим подходом было бы использовать SQLFORM(db.student) для генерации формы, а не SQLFORM.factory, если вам не нужно добавлять дополнительные поля или комбинировать поля из нескольких таблиц базы данных. Если необходимо использовать SQLFORM.factory, а затем вставить form.vars.photo (который будет содержать имя файла, генерируемый SQLFORM.factory), а не request.vars.photo (который содержит реальный объект файла и запустят новое создание файла):

db.student.insert(..., photo=form.vars.photo) 
+0

Вот установил ее, еще раз спасибо @Энтони. Мне нужно было использовать SQLFORM.factory, потому что у меня есть несколько выпадающих списков, для которых мне нужно значение для выбранного элемента, а не его содержимого, если вы понимаете, что я имею в виду. –