Created
February 9, 2014 21:01
-
-
Save jrm2k6/8905880 to your computer and use it in GitHub Desktop.
Override model views for Flask Admin to not display blank dropdown for models with relationship annotation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#models.py | |
import sqlalchemy | |
from flask_sqlalchemy import SQLAlchemy | |
from sqlalchemy.orm import class_mapper, ColumnProperty | |
db = SQLAlchemy() | |
class User(db.Model): | |
id = db.Column(db.Integer, primary_key=True) | |
email = db.Column(db.String(120), unique=True) | |
votes = db.relationship('Vote', backref='vote_user') | |
def __init__(self, email=''): | |
self.email = email | |
def __repr__(self): | |
return '<User %r>' % self.email | |
def __unicode__(self): | |
return self.email | |
class Presentation(db.Model): | |
id = db.Column(db.Integer, primary_key=True) | |
url = db.Column(db.String(200), unique=True) | |
owner = db.Column(db.String(2000)) | |
votes = db.relationship('Vote', backref='vote_presentation') | |
def __init__(self, url='', owner=''): | |
self.url = url | |
owner = owner | |
def __repr__(self): | |
return '<Presentation %r %r>' % (self.url, self.owner) | |
def __unicode__(self): | |
return self.url | |
class Vote(db.Model): | |
id = db.Column(db.Integer, primary_key=True) | |
presentation = db.Column(db.Integer, db.ForeignKey('presentation.id')) | |
user = db.Column(db.Integer, db.ForeignKey('user.id')) | |
def __init__(self, user=None, presentation=None): | |
self.user = user | |
self.presentation = presentation | |
def __repr__(self): | |
return '<Vote %r %r>' % (self.presentation.url, self.user.email) | |
def __unicode__(self): | |
return self.user.email + ' ' + self.presentation.url | |
#custom views | |
from flask.ext.admin.contrib.sqla import ModelView | |
from models import User, Presentation | |
class GalleryUserView(ModelView): | |
column_exclude_list = ['votes'] | |
form_excluded_columns = ['votes'] | |
def __init__(self, session, **kwargs): | |
super(GalleryUserView, self).__init__(User, session, **kwargs) | |
class GalleryPresentationView(ModelView): | |
column_exclude_list = ['votes'] | |
form_excluded_columns = ['votes'] | |
def __init__(self, session, **kwargs): | |
super(GalleryPresentationView, self).__init__(Presentation, session, **kwargs) | |
#app.py | |
# -- put your different imports, create your app.. | |
admin = Admin(app) | |
admin.add_view(GalleryUserView(db.session)) | |
admin.add_view(GalleryPresentationView(db.session)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment