Это мой код: модель:
class Employee(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(60), index=True, unique=True)
username = db.Column(db.String(60), index=True, unique=True)
first_name = db.Column(db.String(60), index=True)
last_name = db.Column(db.String(60), index=True)
password_hash = db.Column(db.String(128))
department_id = db.Column(db.Integer, db.ForeignKey('departments.id'))
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
is_admin = db.Column(db.Boolean, default=False)
моя форма:
class RegistrationForm(FlaskForm):
"""
Form for users to create new account
"""
email = StringField('Email', validators=[DataRequired(), Email()])
username = StringField('Username', validators=[DataRequired()])
first_name = StringField('First Name', validators=[DataRequired()])
last_name = StringField('Last Name', validators=[DataRequired()])
password = PasswordField('Password', validators=[
DataRequired(),
EqualTo('confirm_password')
])
confirm_password = PasswordField('Confirm Password')
submit = SubmitField('Register')
def validate_email(self, field):
if Employee.query.filter_by(email=field.data).first():
raise ValidationError('Email is already in use.')
def validate_username(self, field):
if Employee.query.filter_by(username=field.data).first():
raise ValidationError('Username is already in use.')
мой маршрут:
@auth.route('/register/edit/<int:id>', methods=['GET', 'POST'])
@login_required
def edit_register(id):
"""
Edit a account
"""
check_admin()
add_register = False
employee = Employee.query.get_or_404(id)
form = RegistrationForm(obj=Employee)
del form.password # Ignore password when editing form
del form.confirm_password
if form.validate_on_submit():
employee = Employee(email=form.email.data,
username=form.username.data,
first_name=form.first_name.data,
last_name=form.last_name.data)
db.session.commit()
flash('You have successfully edited employee.')
# redirect to the roles page
return redirect(url_for('home.dashboard'))
form.email.data = employee.email
form.username.data = employee.username
form.first_name.data = employee.first_name
form.last_name.data = employee.last_name
return render_template('auth/register.html', action="Edit", add_register=add_register,
form=form, title="Edit Employee")
проблема в том, что адрес электронной почты и имя пользователя валидаторы включены, поэтому я не могу редактировать своего пользователя.
Могу ли я добавить условия в def validate_email и validate_username, чтобы проверять только на Добавить пользователя, но если пользователь изменит свое имя пользователя, моя база данных unicity будет нарушена ? Или я могу написать что-нибудь, чтобы проверить это, только если пользователь изменит имя пользователя и / или адрес электронной почты?
избежать проверки, спасибо