Skip to content

Instantly share code, notes, and snippets.

@ix5
Last active March 22, 2021 22:35
Show Gist options
  • Save ix5/1e63dd3e95a1b4547d9f00a74e5c06e0 to your computer and use it in GitHub Desktop.
Save ix5/1e63dd3e95a1b4547d9f00a74e5c06e0 to your computer and use it in GitHub Desktop.
from flask import Flask
import flask_admin as admin
from flask_sqlalchemy import SQLAlchemy
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):
__tablename__ = "entry"
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):
__tablename__ = "tag"
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):
pass
class TagAdmin(sqla.ModelView):
pass
class DefaultView(sqla.ModelView):
column_searchable_list = [
"title",
"tags.name", # Important to specify .name!
]
admin = admin.Admin(app, name='Test', template_mode='bootstrap4', index_view=DefaultView(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)
@ix5
Copy link
Author

ix5 commented Mar 22, 2021

Flask-Admin      1.5.7
Flask-SQLAlchemy 2.5.1
SQLAlchemy       1.4.2
 python app.py
/home/me/.virtualenvs/vp/lib/python3.9/site-packages/flask_sqlalchemy/__init__.py:872: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  warnings.warn(FSADeprecationWarning(
Traceback (most recent call last):
  File "/home/me/downloads/app.py", line 52, in <module>
    admin = admin.Admin(app, name='Test', template_mode='bootstrap4', index_view=DefaultView(Entry, db.session))
  File "/home/me/.virtualenvs/vp/lib/python3.9/site-packages/flask_admin/contrib/sqla/view.py", line 327, in __init__
    super(ModelView, self).__init__(model, name, category, endpoint, url, static_folder,
  File "/home/me/.virtualenvs/vp/lib/python3.9/site-packages/flask_admin/model/base.py", line 818, in __init__
    self._refresh_cache()
  File "/home/me/.virtualenvs/vp/lib/python3.9/site-packages/flask_admin/model/base.py", line 913, in _refresh_cache
    self._search_supported = self.init_search()
  File "/home/me/.virtualenvs/vp/lib/python3.9/site-packages/flask_admin/contrib/sqla/view.py", line 581, in init_search
    if tools.is_hybrid_property(self.model, name):
  File "/home/me/.virtualenvs/vp/lib/python3.9/site-packages/flask_admin/contrib/sqla/tools.py", line 214, in is_hybrid_property
    return last_name in get_hybrid_properties(last_model)
  File "/home/me/.virtualenvs/vp/lib/python3.9/site-packages/flask_admin/contrib/sqla/tools.py", line 195, in get_hybrid_properties
    for key, prop in inspect(model).all_orm_descriptors.items()
  File "/home/me/.virtualenvs/vp/lib/python3.9/site-packages/sqlalchemy/inspection.py", line 71, in inspect
    raise exc.NoInspectionAvailable(
sqlalchemy.exc.NoInspectionAvailable: No inspection system is available for object of type <class 'str'>

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