half broke version, but its working... need to do the subquery to get list of all real books without subs, but also make sense of how author data is coming through without marshmallow of BookSchema?
This commit is contained in:
39
main.py
39
main.py
@@ -22,6 +22,15 @@ book_publisher_link = db.Table('book_publisher_link', db.Model.metadata,
|
||||
db.Column('publisher_id', db.Integer, db.ForeignKey('publisher.id'))
|
||||
)
|
||||
|
||||
class Book_Sub_Book_Link(db.Model):
|
||||
__tablename__ = 'book_sub_book_link'
|
||||
book_id = db.Column( db.Integer, db.ForeignKey('book.id'), primary_key=True)
|
||||
sub_book_id = db.Column( db.Integer, db.ForeignKey('book.id'), primary_key=True)
|
||||
sub_book_num = db.Column( db.Integer )
|
||||
|
||||
def __repr__(self):
|
||||
return "<book_id: {}, sub_book_id: {}, sub_book_num>".format(self.book_id, self.sub_book_id, self.sub_book_num )
|
||||
|
||||
class Book(db.Model):
|
||||
id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True)
|
||||
title = db.Column(db.String(100), unique=True, nullable=False)
|
||||
@@ -37,9 +46,14 @@ class Book(db.Model):
|
||||
|
||||
author = db.relationship('Author', secondary=book_author_link)
|
||||
publisher = db.relationship('Publisher', secondary=book_publisher_link)
|
||||
# sub_book = db.relationship('Book', secondary="book_sub_book_link",
|
||||
# primaryjoin="Book.id == Book_Sub_Book_Link.book_id",
|
||||
# secondaryjoin="Book.id == Book_Sub_Book_Link.sub_book_id",
|
||||
# backref="parent_book",
|
||||
# )
|
||||
|
||||
def __repr__(self):
|
||||
return "<title: {}, id: {}>".format(self.title, self.id )
|
||||
return "<id: {}, title: {}, year_published: {}, rating: {}, condition: {}, owned: {}, covertype: {}, notes: {}, blurb: {}, created: {}, modified: {}, publisher: {}>".format(self.title, self.id, self.year_published, self.rating, self.condition, self.owned, self.covertype, self.notes, self.blurb, self.created, self.modified, self.publisher )
|
||||
|
||||
class Author(db.Model):
|
||||
id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True)
|
||||
@@ -71,28 +85,43 @@ class PublisherSchema(ma.SQLAlchemyAutoSchema):
|
||||
include_relationships = True
|
||||
load_instance = True
|
||||
|
||||
class BookSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Book_Sub_Book_Link(ma.SQLAlchemyAutoSchema):
|
||||
class Meta:
|
||||
model = Book
|
||||
model = Book_Sub_Book_Link
|
||||
include_relationships = True
|
||||
load_instance = True
|
||||
|
||||
#class BookSchema(ma.SQLAlchemyAutoSchema):
|
||||
# class Meta:
|
||||
# model = Book
|
||||
# include_relationships = True
|
||||
# load_instance = True
|
||||
|
||||
author_schema = AuthorSchema()
|
||||
publisher_schema = PublisherSchema()
|
||||
book_schema = BookSchema()
|
||||
book_sub_book_link_schema = Book_Sub_Book_Link()
|
||||
#book_schema = BookSchema()
|
||||
|
||||
####################################### ROUTES #######################################
|
||||
@app.route("/books", methods=["GET"])
|
||||
def books():
|
||||
if request.form:
|
||||
print(request.form)
|
||||
books = Book.query.all()
|
||||
# books = Book.query.all()
|
||||
#### quick hack - lets just return all the books not in the first 6, but should be those that are not in list of book_id's from book_sub_book_link
|
||||
books = Book.query.filter( ~ Book.id.in_([0, 1, 2, 3, 4, 5, 6]) ).all()
|
||||
return render_template("books.html", books=books)
|
||||
|
||||
@app.route("/book/<id>", methods=["GET"])
|
||||
def book(id):
|
||||
book = Book.query.get(id)
|
||||
book_s = book_schema.dump(book)
|
||||
subs = db.engine.execute ( "select book_id, sub_book_id, sub_book_num from book_sub_book_link where book_id = " + id )
|
||||
sub_book=[]
|
||||
for row in subs:
|
||||
sub_book.append( { 'sub_book_id': row.sub_book_id, 'sub_book_num': row.sub_book_num } )
|
||||
book_s['sub_book'] = sub_book
|
||||
|
||||
return render_template("books.html", books=book_s )
|
||||
|
||||
@app.route("/authors", methods=["GET"])
|
||||
|
||||
Reference in New Issue
Block a user