Solution
class RegistrationForm(FlaskForm):
def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)
self.total_travel_km = None
def validate_home_address(self, home_address):
user_loc = locator.geocode(home_address.data)
user_coords = (user_loc.latitude, user_loc.longitude)
one_way = geopy.distance.geodesic(tco_coords, user_coords).km
total_travel_km = one_way * 4
if total_travel_km < self.car_range.data:
raise ValidationError('You live too close to work')
# all good save the total travel in the form
self.total_travel_km = total_travel_km
class RegistrationForm(FlaskForm):
def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)
self.total_travel_km = None
self.required_car_range = kwargs.get('required_car_range', 400)
def validate_car_range(self, car_range):
if car_range.data > self.required_car_range:
raise ValidationError('Your car range does not meet our requirements')
@app.route("/register", methods=['POST', 'GET'])
def register():
form = RegistrationForm(required_car_range=600)
if form.validate_on_submit():
user = User(car_range=form.car_range.data, home_address=form.home_address.data,
car_travel_km=form.total_travel_km)
db.session.add(user)
db.session.commit()