Skip to content

Instantly share code, notes, and snippets.

@mrjoes
Last active March 22, 2021 23:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrjoes/30cf8cd7865484ade357e966ad82439d to your computer and use it in GitHub Desktop.
Save mrjoes/30cf8cd7865484ade357e966ad82439d to your computer and use it in GitHub Desktop.
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import relationship, backref
import flask_admin as admin
from flask_admin.contrib import sqla
# Create application
app = Flask(__name__)
app.config['SECRET_KEY'] = '123456790'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
@app.route('/')
def index():
return '<a href="/admin/">Click me to get to Admin!</a>'
entry_tags_table = db.Table(
"entry_tags",
db.Model.metadata,
db.Column("entry_id", db.Integer, db.ForeignKey("entry.id")),
db.Column("tag_id", db.Integer, db.ForeignKey("tag.id")),
)
class Entry(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
tags = db.relationship("Tag", secondary=entry_tags_table, back_populates='entries')
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode, nullable=False)
entries = db.relationship("Entry", secondary=entry_tags_table, back_populates='tags')
class EntryAdmin(sqla.ModelView):
column_searchable_list = [
"title",
"tags.name",
]
class TagAdmin(sqla.ModelView):
pass
admin = admin.Admin(app, name='Test', template_mode='bootstrap4')
admin.add_view(EntryAdmin(Entry, db.session))
admin.add_view(TagAdmin(Tag, db.session))
if __name__ == '__main__':
import sqlalchemy
print(sqlalchemy.__version__)
db.create_all()
app.run(debug=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment