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)

21
demandé sur wodow 2013-06-18 20:59:30

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.

24
répondu Joes 2013-06-19 06:33:52

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
    }
34
répondu wodow 2017-03-29 10:28:29

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

0
répondu Yuan Cheng 2016-12-20 04:05:13