Я создаю часть своего приложения, в которой администратор может зарегистрировать пользователя.У меня есть форма регистрации, в которой одним из элементов формы является QuuerySelectField, который получает список местоположений из базы данных, на которые пользователь также может быть связан.Я могу отобразить QuerySelectField с правильной информацией, но после отправки формы я получаю сообщение «sqlalchemy.exc.ArgumentError: Object« Site »недопустимо как ошибка литерала SQL» Ошибка.Эта ошибка заполняется при попытке выполнить запрос к базе данных в моей модели Sites Model, чтобы найти имя выбранной опции в QuerySelectField, чтобы затем я мог сохранить идентификатор конкретного сайта в переменной для дальнейшего использования.
Я не уверен, как сделать объект буквальным значением, которое sqlalchemy может прочитать.Я попытался обернуть его в str (), но это ничего не сделало.Кстати, я новичок, поэтому я все еще пытаюсь понять некоторые элементы фляги.
Это моя форма для того, чего я пытаюсь достичь
def site():
return Sites.query.all()
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(),
Length(min=2, max=20)])
email = StringField('Email', validators=
[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
confirm_pass = PasswordField('Confirm Password', validators=
[DataRequired(), EqualTo('password')])
admin_status = BooleanField('Check for Admin Status')
sitechoices = QuerySelectField(query_factory=site, allow_blank=False,
get_label='sitename')
Вот информация о маршруте в моем rout.py
@app.route('/register', methods=['POST', 'GET'])
@login_required
def register():
forms = RegistrationForm()
if forms.validate_on_submit():
hashed_pw = bcrypt.generate_password_hash(forms.password.data).decode('utf-8')
siteid = Sites.query.filter_by(sitename=forms.sitechoices.data).first().id
user = User(site = forms.sitechoices.data, username = forms.username.data, email = forms.email.data,
password = hashed_pw, adminstatus= forms.admin_status.data, sitelink=siteid)
db.create_all()
db.session.add(user)
db.session.commit()
flash(f"{form.username.data} has been added!")
return redirect(url_for('dash'))
return render_template('register.html', name = 'login', form=forms)
Вот информация о шаблоне, которая необходима:
<div class="form-group">
{{form.sitechoices}}
</div>
Я хотел бы получить имена сайтов из модели в поле queryselect ииметь возможность зарегистрировать пользователя с этой выбранной опцией.