Skip to content

Instantly share code, notes, and snippets.

@jrm2k6
Created February 9, 2014 21:01
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 jrm2k6/8905880 to your computer and use it in GitHub Desktop.
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
#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