Я использую дуршлаг и деформацию для создания полей загрузки файлов в моем банке данных. Код сохраняет имя файла в моей базе данных и сохраняет фактический файл в каталоге.
Если пользователь не загружает ни одного файла, я получаю эту ошибку
'AttributeError: у объекта' bytes 'нет атрибута' filename '
, но я хочу, чтобы пользователь был возможность оставить файл загрузки пустым. Это единственный способ решить эту проблему, используя некоторые операторы IF?
Вот мой код
class Sample(colander.MappingSchema):
setup_schema(None, spectra)
spectraSchema = spectra.__colanderalchemy__
format = colander.SchemaNode(
colander.String(),
default='',
widget=deform.widget.SelectWidget(values=format_choices))
sample_power_spectrum = colander.SchemaNode(
deform.FileData(), widget=deform.widget.FileUploadWidget(tmpstore))
background_power_spectrum = colander.SchemaNode(
deform.FileData(), widget=deform.widget.FileUploadWidget(tmpstore))
initial_result_spectrum = colander.SchemaNode(
deform.FileData(), widget=deform.widget.FileUploadWidget(tmpstore))
final_spectrum = colander.SchemaNode(
deform.FileData(), widget=deform.widget.FileUploadWidget(tmpstore))
setup_schema(None, post_processing_and_deposited_spectra)
ppSchema = post_processing_and_deposited_spectra.__colanderalchemy__
#upload = colander.SchemaNode(
#deform.FileData(), widget=deform.widget.FileUploadWidget(tmpstore))
form = Sample()
form = deform.Form(form, buttons=('submit',))
if 'submit' in request.POST:
try:
appstruct = form.validate(request.POST.items()) #call validate
#upload file functionality
controls = request.POST.items()
pstruct = peppercorn.parse(controls)
# get filenames
myfile = pstruct['sample_power_spectrum']['upload']
background = pstruct['background_power_spectrum']['upload']
init = pstruct['initial_result_spectrum']['upload']
final = pstruct['final_spectrum']['upload']
#using pure path as coding on windows and putting on to a linux server
#specify where to store the files
permanent_store = os.path.join('ftirdb', 'static', 'data')
#open file and add file from temp store to permanent
permanent_file = open(
os.path.join(permanent_store, myfile.filename.lstrip(os.sep)),
'wb')
shutil.copyfileobj(myfile.file, permanent_file)
myfile.file.close()
#close file and repeat for each item
permanent_file.close()