问题
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?
回答1:
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.
回答2:
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))
回答3:
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))
回答4:
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