From d61e8305250c734ca2da3018b77f3e7e957f173d Mon Sep 17 00:00:00 2001 From: Damien De Paoli Date: Fri, 4 Dec 2020 18:59:34 +1100 Subject: [PATCH] now create an owned on /owned, rather than /owned/-1 kludge. Also using sequence for creation. All good - made sequences for all relevant tables too. Last question is how to do redirect to /owneds and still show messsage --- README | 3 ++- main.py | 1 + owned.py | 43 +++++++++++++++++++++++-------------------- templates/base.html | 2 +- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/README b/README index deb4c69..8ba81cd 100644 --- a/README +++ b/README @@ -25,6 +25,8 @@ python3 main.py ### TODO: + -- Without redirects (after creation) the potential for reload's trying to re-add objects may suck... + -> see if I can see how to pass alert/message through to /owneds somehow ... if I can even pass a global or some shit then pick it up in the python code? - need to create all classes (green + button) - need to delete all classes (and watch for referential integrity) - need to add 1 author to book, book to sub_book, series @@ -41,4 +43,3 @@ python3 main.py when moving a book in a series (which is part of 2 series), do we pop-up offer to move parent/child series orders as well to match (think Thomas Covenant) - try to "export" db from sqlalchemy to see what it is doing with sequences / primary key for owned table and maybe "new_id" not needed? diff --git a/main.py b/main.py index d926dc6..8f71cf2 100644 --- a/main.py +++ b/main.py @@ -112,6 +112,7 @@ class Book(db.Model): def LastSubBookNum(self): # need to work out the last sub book and return an id? if self.IsParent(): + # -1 subscript returns the last one return self.child_ref[-1].sub_book_num else: return 1 diff --git a/owned.py b/owned.py index 82fd3be..37a788d 100644 --- a/owned.py +++ b/owned.py @@ -2,13 +2,14 @@ from wtforms import SubmitField, StringField, HiddenField, SelectField, validato from flask import request, render_template from flask_wtf import FlaskForm from __main__ import db, app, ma -from sqlalchemy import func +from sqlalchemy import func, Sequence + ################################################################################ # Class describing Owned in the database, and via sqlalchemy, connected to the DB as well ################################################################################ class Owned(db.Model): - id = db.Column(db.Integer, primary_key=True ) + id = db.Column(db.Integer, db.Sequence('owned_id_seq'), primary_key=True ) name = db.Column(db.String(50), unique=True, nullable=False) def __repr__(self): @@ -20,7 +21,6 @@ class Owned(db.Model): class OwnedSchema(ma.SQLAlchemyAutoSchema): class Meta: model = Owned - ################################################################################ # Helper class that defines a form for owned, used to make html
, with field validation (via wtforms) ################################################################################ @@ -40,6 +40,25 @@ def owneds(): owneds = Owned.query.order_by('id').all() return render_template("show_id_name.html", objects=owneds, page_title='Show All Ownership types', url_base='owned') +################################################################################ +# /owned -> GET/POST -> creates a new owned type and when created, takes you back to /owneds +################################################################################ +@app.route("/owned", methods=["GET", "POST"]) +def new_owned(): + alert="success" + owned_form = OwnedForm(request.form) + if 'name' not in request.form: + owned=None + message="" + return render_template("edit_id_name.html", owned=owned, alert=alert, message=message, form=owned_form, page_title='Create new Owned Type' ) + else: + owned = Owned( name=request.form["name"] ) + db.session.add(owned) + db.session.commit() + message="Created new Owned Type (id={})".format(owned.id) + owneds = Owned.query.order_by('id').all() + return render_template("show_id_name.html", objects=owneds, page_title='Show All Ownership types', url_base='owned', alert=alert, message=message) + ################################################################################ # /owned/ -> GET/POST(save or delete) -> shows/edits/delets a single # owned @@ -47,24 +66,8 @@ def owneds(): @app.route("/owned/", methods=["GET", "POST"]) def owned(id): alert="success" - owned_form = OwnedForm(request.form) - if id == "-1": - if 'name' not in request.form: - owned=None - message="" - return render_template("edit_id_name.html", owned=owned, alert=alert, message=message, form=owned_form, page_title='Create new Owned Type' ) - else: - res=db.session.query(func.max(Owned.id)).all() - new_id=res[0][0] - new_id=new_id+1 - owned = Owned( id=new_id, name=request.form["name"] ) - db.session.add(owned) - db.session.commit() - message="Created new Owned Type (id={})".format(new_id) - owneds = Owned.query.order_by('id').all() - return render_template("show_id_name.html", objects=owneds, page_title='Show All Ownership types', url_base='owned', alert=alert, message=message) - ### DDP: should this be request.form or request.values? + owned_form = OwnedForm(request.form) if request.method == 'POST' and owned_form.validate(): owned = Owned.query.get(id) if 'delete' in request.form: diff --git a/templates/base.html b/templates/base.html index af2ef0b..7393464 100644 --- a/templates/base.html +++ b/templates/base.html @@ -58,7 +58,7 @@ Show Conditions Create new Covertype Show Covertypes - Create new Owned Type + Create new Owned Type Show Ownership Types Create new Rating Show Ratings