class Parent(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(120))
def __repr_(self):
return '<Parent %r>' % (self.name)
admin.add_view(ModelView(Parent, db.session))
class Child(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(120))
parent = db.Column(db.Integer, db.ForeignKey(Parent))
admin.add_view(ModelView(Child, db.session))
Hello -
The code above is an example of flask-admin page that I am trying to create. The goal is to have on Child's create page a text box for name and a drop down to select a parent.
With the above setup, there is only name field. The parent drop down box is missing.
Any ideas how to make it happen?
How about if you change the Child
class to this:
class Child(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(120))
parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))
parent = db.relationship('Parent', backref=db.backref('children', lazy='dynamic'))
I don't know much about this, and I don't know if you need the back reference, but this setup works for me with Flask-Admin.
You likely need to specify some additional options to flask-admin via a subclass:
class ChildView(ModelView):
column_display_pk = True # optional, but I like to see the IDs in the list
column_hide_backrefs = False
column_list = ('id', 'name', 'parent')
admin.add_view(ChildView(Parent, db.session))
Here is an all-inclusive solution that requires no manual maintenance.
from sqlalchemy import inspect
class ChildView(ModelView):
column_display_pk = True # optional, but I like to see the IDs in the list
column_hide_backrefs = False
column_list = [c_attr.key for c_attr in inspect(Child).mapper.column_attrs]
admin.add_view(ChildView(Child, db.session))
For what it is worth, none of the solutions listed here worked for me. I was facing the issue where foreign keys were not showing up in Flask-Admin.
This is what worked for them to show up:
class CustomModelViewName(ModelView):
can_delete = True
column_hide_backrefs = False
column_list = ["column_name", "column_name", "etc", "etc", "etc"]
column_searchable_list = ["column_name"]
来源:https://stackoverflow.com/questions/16160507/flask-admin-not-showing-foreignkey-columns