Skip to content

Instantly share code, notes, and snippets.

@boolbag
Created September 2, 2015 05:21
Show Gist options
  • Save boolbag/a166b40512d47d42aea2 to your computer and use it in GitHub Desktop.
Save boolbag/a166b40512d47d42aea2 to your computer and use it in GitHub Desktop.
from flask import Flask
from flask_admin import Admin
from flask_admin.contrib import sqla
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
# Create application
app = Flask(__name__)
# Create dummy secrey key so we can use sessions
app.config['SECRET_KEY'] = '123456790'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///a_sample_database.sqlite'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
# Create admin app
admin = Admin(app, name="Delete Subscriptions with Schedule Children", template_mode='bootstrap3')
# Flask views
@app.route('/')
def index():
return '<a href="/admin/">Click me to get to Admin!</a>'
class Person(db.Model):
__tablename__ = 'person'
uid = Column(Integer, primary_key=True)
username = Column(String(20), nullable=False, unique=True)
def __str__(self):
return self.username
class Magazine(db.Model):
__tablename__ = 'magazine'
mid = Column(Integer, primary_key=True)
title = Column(String(80), nullable=False, index=True)
def __str__(self):
return self.title
class Subscription(db.Model):
__tablename__ = 'subscription'
subid = Column(Integer, primary_key=True)
uid = Column(ForeignKey('person.uid', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
mid = Column(ForeignKey('magazine.mid', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, index=True)
notes = Column(String(140), nullable=False)
subscriptionschedule = relationship("SubscriptionSchedule", cascade="all,delete", backref="subscription")
# need this to display in child tables (e.g. sub_schedule)
def __str__(self):
return self.notes
class SubscriptionSchedule(db.Model):
__tablename__ = 'subscription_schedule'
schedid = Column(Integer, primary_key=True)
subid = Column(ForeignKey('subscription.subid', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
notes = Column(String(140), nullable=False)
def __str__(self):
return self.notes
class SubscriptionAdmin(sqla.ModelView):
column_display_pk = True
class ScheduleAdmin(sqla.ModelView):
column_display_pk = True
admin.add_view(SubscriptionAdmin(Subscription, db.session))
admin.add_view(ScheduleAdmin(SubscriptionSchedule, db.session, name='Schedule'))
# More submenu
admin.add_view(sqla.ModelView(Person, db.session, category='More'))
admin.add_view(sqla.ModelView(Magazine, db.session, category='More'))
if __name__ == '__main__':
db.drop_all()
db.create_all()
db.session.add(Person(uid=1, username='Joe'))
db.session.add(Person(uid=2, username='Ann'))
db.session.add(Magazine(mid=1, title='Time'))
db.session.add(Magazine(mid=2, title='Newsweek'))
db.session.commit()
db.session.add(Subscription(uid=1, mid=1, subid=1, notes='Joe subscribed to Time' ))
db.session.add(Subscription(uid=2, mid=2, subid=2, notes='Ann subscribed to Newsweek' ))
db.session.commit()
db.session.add(SubscriptionSchedule(schedid=1, subid=1, notes="Joe's Time subscription has a schedule" ))
db.session.commit()
# Start app
app.run(debug=True)
@boolbag
Copy link
Author

boolbag commented Sep 2, 2015

Fixes this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment