Finally, I've found my solution in the following post
My mistakes were:
- putting a
db.relationship
(CandidatLanguage) in myCandidat
class. Instead of that, I put relations in my "pivot" table (CandidatLanguage). - as IfLoop said in the post, I have to "switch from a plain many-to-many relationship to an "Association Object". I don'' understood why but it works using Association object.
Then my models.py now looks like this:
class Candidat(db.Model):
id = db.Column(db.Integer, primary_key=True)
firstname = db.Column(db.String(128))
lastname = db.Column(db.String(128))
birthdate = db.Column(db.Date)
categories = db.relationship('Category', secondary=category_candidat,
backref=db.backref('candidat', lazy='dynamic'))
def __repr__(self):
return '<Nom %r>' % self.lastname
class Language(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
def __repr__(self):
return '%s' % unicode(self.name)
class Languagelevel(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
def __repr__(self):
return '%s' % self.name
class CandidatLanguage(db.Model):
id = db.Column(db.Integer, primary_key=True)
candidat_id = db.Column(db.Integer, db.ForeignKey('candidat.id'))
language_id = db.Column(db.Integer, db.ForeignKey('language.id'))
language_level_id = db.Column(db.Integer, db.ForeignKey('languagelevel.id'))
language = db.relationship(Language, backref="Candidat")
candidat = db.relationship(Candidat, backref="Langue")
languagelevel = db.relationship(Languagelevel, backref="Candidat")
And my views.py like that:
from flask.ext.admin import Admin, BaseView, expose
class MyView(BaseView):
@expose('/')
def index(self):
return self.render('adm-index.html')
admin = Admin(app)
admin.add_view(MyView(name='Hello'))
from flask.ext.admin.contrib.sqla import ModelView
class CandidatView(ModelView):
column_auto_select_related = True
inline_models = (CandidatLanguage,)
admin.add_view(CandidatView(Candidat, db.session))
admin.add_view(ModelView(Language, db.session))
admin.add_view(ModelView(Languagelevel, db.session))
With that, everything works fine and I have an inline form like I want.
I haven't understood everything but it works. if somebody can explain, it's of coruse welcome.
Regards