Les vues de modèle dans Flask-Admin hyperlien à d'autres vues de modèle?
supposons que nous ayons un model, Foo, qui fait référence à un autre model, les vues Utilisateur - et flasque-Admin pour les deux.
sur la page Foo admin view (par exemple quelque chose comme la première capture d'écran à http://mrjoes.github.io/2012/08/27/flask-admin-102.html), je voudrais que les entrées dans la colonne utilisateur soient liées à la vue du modèle utilisateur correspondant.
dois-je modifier l'un des modèles de flasque-Admin pour y arriver?
(ceci est possible dans le L'interface d'administration de Django en débitant simplement HTML pour un champ donné et en mettant allow_tags
(réf) True bypass Django balise HTML filtre)
3 réponses
Utiliser column_formatters
pour ceci: https://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.column_formatters
Idée est assez simple: pour un champ que vous souhaitez afficher en tant que lien hypertexte, soit générer une chaîne HTML et l'envelopper avec Jinja2 Markup
classe (afin de ne pas être échappés dans les modèles), ou utiliser macro
helper: https://github.com/mrjoes/flask-admin/blob/master/flask_admin/model/template.py
Macro helper vous permet d'utiliser des macros Jinja2 personnalisées dans les template overridden, qui déplace la logique de présentation vers les templates.
en ce qui concerne L'URL, tout ce dont vous avez besoin est de trouver le nom du point final généré (ou fourni) pour le User
modéliser et faire url_for('userview.edit_view', id=model.id)
pour générer le lien.
un exemple de code basé sur des Joes de réponse:
class MyFooView(ModelView):
def _user_formatter(view, context, model, name):
return Markup(
u"<a href='%s'>%s</a>" % (
url_for('user.edit_view', id=model.user.id),
model.user
)
) if model.user else u""
column_formatters = {
'user': _user_formatter
}
informations supplémentaires pour @wodow, notez que model.user
est erroné si vous utilisez pymongo comme backend, parce que le modèle dans pymongo est un type dict, vous pouvez juste utiliser model['name']
remplacer