сначала моя модель выглядит следующим образом
file = db.StringField(db_field = "f", required=True, unique=True)
file_tn = db.StringField(db_field = "tn")
descp = db.StringField(db_field="d", max_length=200)
clr = db.IntField(db_field="cl", choices = COLOR, required=True)
prize = db.StringField(db_field="p")
size = db.IntField(db_field="s", required=True)
create_date = db.LongField(db_field="c", default=nowms()())
from_user = db.ReferenceField(User, db_field="fu")
Вы можете угадать правильно!
Я попытался создать форму загрузки с некоторыми деталями, такими как размер, цвет и сохранить их все в базе данных
но проблема в том, что когда я создаю такую форму
class UpLoadForm(Form):
files = FileField('File', validators=[FileAllowed(['jpg','jpeg','png','gif','pdf']),validators.DataRequired()])
size = SelectField('Paper\'s size',[validators.DataRequired()], coerce=int)
color = SelectField('BW or Color', [validators.DataRequired()], choices=[(1,"Color"),
(0,"Mono")])
да, это SelectField с динамическим выбором
@core.route('/file/upload', methods=('GET','POST'))
def upload():
ref = request.referrer
form = UpLoadForm()
#get store objects which I stored list of tuples for use in dynamic choices
#it's look like this [(3,'A3'),(4,'A4')] yeah I'm creating a printing app
store = Store.objects.filter(storecode='123456').first()
#store.pages contained list of tuples
form.size.choices = store.pages
#this will get logged in user objects to know who upload it
logged_user = User.objects.filter(email = session.get('email')).first()
if form.validate_on_submit():
assert request.files.get('files') is not None
if request.files.get('files'):
filename = secure_filename(form.files.data.filename)
filepath = os.path.join(UPLOAD_FOLDER_FILES, filename)
form.files.data.save(filepath)
#it won't upload even when I hard code clr and size input(size = 1, clr = 1)
file = File(
file = filename,
clr = form.color.data,
size = form.size.data,
from_user = logged_user
)
file.save()
Я не знаю, почему это не такt работа
1.файл даже не загружен
2. Ошибка подтверждения отсутствует
3. Ничего не было сохранено в db
, что я пытался
1.создать другую форму, которая отделяет FileField от
результата?это как-то работает
class UpLoadForm(Form):
files = FileField('File', validators=[FileAllowed(['jpg','jpeg','png','gif','pdf']),validators.DataRequired()])
class FileDetail(Form):
size = SelectField('Paper\'s size',[validators.DataRequired()], coerce=int)
color = SelectField('Bw or Color', [validators.DataRequired()], choices=[(1,"Color"),
(0,"Mono")])
все почти одинаково, за исключением того, что я просто добавил вторую форму
@core.route('/file/upload', methods=('GET','POST'))
def upload():
ref = request.referrer
form = UpLoadForm()
#here is the second form I added
store = Store.objects.filter(storecode='123456').first()
form2 = FileDetail()
form2.size.choices = store.pages
logged_user = User.objects.filter(email = session.get('email')).first()
if form.validate_on_submit():
if request.files.get('files'):
###just the same###
filename = secure_filename(form.files.data.filename)
filepath = os.path.join(UPLOAD_FOLDER_FILES, filename)
form.files.data.save(filepath)
###################
file = File(
file = filename,
clr = form2.color.data,
size = form2.size.data,
from_user = logged_user
)
file.save()
file = None
if ref:
return redirect(ref)
else:
return redirect(url_for('core.allstore'))
else:
return "There is no spoon"
сторона HTML верна, я мог бы показать вам, если вы думаете, что у нее есть чем занятьсяс проблемой (вопрос уже длинный)
это работает на данный момент, но я не знаю, почему это не работает в первую очередь
извините за плохой Eng не стесняйтесь исправлятьвсе или попросить больше информации