2010-10-30 9 views
0

Je suis un peu confus quant à savoir pourquoi ce genre de fonctionnalité n'est pas par défaut dans l'admin, mais peut-être que quelqu'un peut me donner quelques hinters sur la façon de s'y prendre.django admin inlines (et inlines imbriqués): comment puis-je obtenir cette fonctionnalité?

J'ai une application de projet qui garde la trace des projets et doit être éditée par l'admin. Chaque projet possède de nombreux modèles liés à ForeignKey (liens, pages à plat, vidéo, image, etc.) qui peuvent être placés en ligne dans l'administration du projet.

(un ou deux modèles ont emboîté inline, donc ils ne pas afficher dans l'admin (this et this beaucoup de billets à ce sujet))

Au lieu d'être en mesure de modifier ces modèles en ligne sur l'administrateur du projet (ce qui devient compliqué et difficile à utiliser), j'aimerais une liste de toutes les instances actuelles de ce modèle lié, et simple bouton ajouter/modifier pour chaque modèle qui ouvre un popup avec le formulaire de ce modèle.

Project Admin: 
    - Normal Fields 

    - Links: 
     -Link 1 (edit) 
     -Link 2 (edit) 
     + add link <- popup 


    - Images: 
     -Image 1 (edit) 
     -Image 2 (edit) 
     + add image <- popup 

ainsi de suite. Comment pourrais-je écrire cela? J'ai juste besoin de le faire pour une section/modèle du panneau d'administration donc je ne pense pas que l'écriture de mon propre backend Crud est nécessaire.

Merci

Répondre

0

Je mis en œuvre quelque chose comme ça dans une application une fois, mais depuis django-admin ne marche pas support inline imbriquées (par lequel je veux dire inline dans inline), j'ai suivi une approche légèrement différente. Le cas d'utilisation était que vous aviez une facture (avec quelques attributs en ligne) et que vous aviez reçu des recuspts (encore avec des attributs inline). Reciepts avait une clé étrangère au modèle de facture (essentiellement un reçu était le paiement partiel de la facture). Je l'ai implémenté en ajoutant un champ à la vue de la liste des factures qui était liée à une vue de liste filtrée.

il y aurait donc dans l'admin de la facture,:

def admin_view_receipts(self, object): 
    url = urlresolvers.reverse('admin:invoice_%s_changelist'%'receipt') 
    params = urllib.urlencode({'invoice__id__exact': object.id}) 
    return '<a href="%s?%s">Receipts</a>' % (url, params) 
admin_view_receipts.allow_tags = True 
admin_view_receipts.short_description = 'Receipts' 

Cela vous donne un lien dans la vue de la liste qui vous amène à une autre vue de la liste, mais filtrée par foreignkey. Vous pouvez maintenant avoir des inlines pour les deux modèles et un accès facile aux modèles associés.

+0

Je ne comprends pas très bien. Cela ajoutera-t-il la liste des recettes à la liste des modifications pour toutes les factures ou la page d'administration de la facture? Je veux juste une liste dans l'admin de facture de tous les reçus associés avec un lien qui vous amènent à la page d'administration de réception (avec la bonne facture sélectionnée comme clé étrangère) –

+0

Depuis demandant ceci: c'est une approche que je prends souvent et l'un des plus réalisables –

+0

Juste vu votre commentaire précédent. Je suppose que vous avez compris depuis :) – zsquare

Questions connexes