From 45bf2ad8707b67b2f756c80edb877a6bfe3897fb Mon Sep 17 00:00:00 2001 From: stilbruch Date: Wed, 6 Apr 2022 13:50:32 -0500 Subject: Workout table and user relationship works --- app/routes.py | 22 ++++++++++++++-------- app/tables/__init__.py | 2 ++ app/tables/user.py | 2 ++ app/tables/workout.py | 26 ++++++++++++++++++-------- app/templates/home.html | 2 +- 5 files changed, 37 insertions(+), 17 deletions(-) create mode 100644 app/tables/__init__.py (limited to 'app') diff --git a/app/routes.py b/app/routes.py index 1a30944..36fb0ba 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,8 +1,8 @@ from app import app, db from flask import render_template, redirect, url_for, flash -from flask_login import login_user, login_required, logout_user +from flask_login import current_user, login_user, login_required, logout_user from forms import LoginForm, RegisterForm, WorkoutCreateForm -from tables.user import User +from tables import User, Workout @app.route("/", methods=["GET"]) def index(): @@ -63,13 +63,19 @@ def register(): @login_required def createWorkout(): form = WorkoutCreateForm() - - # Load data from form - print(form.name.data) - for entry in form.exercises.entries: - print(entry.data) + name = form.name.data if form.validate_on_submit(): - print("Valid") + # Make sure the user doesn't already have a workout with this name + workout = Workout.query.filter_by(user_id=current_user.id, name=name).first() + if not workout: + # TODO: add exercises + workout = Workout(current_user, name, None) + db.session.add(workout) + db.session.commit() + + return redirect(url_for('home')); + else: + flash("Workout with this name already exists", "danger") return render_template('workout/create.html', form=form) diff --git a/app/tables/__init__.py b/app/tables/__init__.py new file mode 100644 index 0000000..e67eb21 --- /dev/null +++ b/app/tables/__init__.py @@ -0,0 +1,2 @@ +from tables.user import User +from tables.workout import * diff --git a/app/tables/user.py b/app/tables/user.py index d384fdb..cfffb80 100644 --- a/app/tables/user.py +++ b/app/tables/user.py @@ -13,6 +13,8 @@ class User(db.Model, UserMixin): password = db.Column(db.String(80)) email = db.Column(db.String(120), unique=True, nullable=False) + workouts = db.relationship("Workout", backref='user', lazy='dynamic') + def __init__(self, username, password, email): self.username = username self.password = generate_password_hash(password) diff --git a/app/tables/workout.py b/app/tables/workout.py index f3a41eb..81f9a68 100644 --- a/app/tables/workout.py +++ b/app/tables/workout.py @@ -1,19 +1,29 @@ from app import db, login_manager # Represents an individual exercise -class Exercise(db.Model) +class Exercise(db.Model): __tablename__ = 'exercises' id = db.Column(db.Integer, primary_key=True) # Represents a singular workout -class Workout(db.Model) +class Workout(db.Model): __tablename__ = 'workouts' id = db.Column(db.Integer, primary_key=True) - user_id = db.Column(db.Integer, db.ForeignKey('user.id')) + name = db.Column(db.String(100), nullable=False) + + # User Relationship + user_id = db.Column(db.Integer, db.ForeignKey('users.id')) + + def __init__(self, user, name, exercises): + self.name = name + self.user_id = user.id + + def __repr__(self): + return f'' # Connects workouts to it's exercises -class WorkoutExercise(db.Model) - __table__ = 'workout_exercises' - id = db.Column(db.Integer, primary_key=True) - workout_id = db.Column(db.Integer, db.ForeignKey('workout.id')) - exercise_id = db.Column(db.Integer, db.ForeignKey('exercise.id')) +#class WorkoutExercise(db.Model): +# __table__ = 'workout_exercises' +# id = db.Column(db.Integer, primary_key=True) +# workout_id = db.Column(db.Integer, db.ForeignKey('workouts.id')) +# exercise_id = db.Column(db.Integer, db.ForeignKey('exercises.id')) diff --git a/app/templates/home.html b/app/templates/home.html index 99da96c..fb47a68 100644 --- a/app/templates/home.html +++ b/app/templates/home.html @@ -31,7 +31,7 @@
-

%workouts%

+

{{ current_user.workouts.count() }}

Workouts

-- cgit v1.2.3