2011-03-26 6 views
3

Je suis nouveau sur FeinCMS et j'essaie de créer mon propre type de contenu. Cela utilise un autre type de contenu personnalisé que j'ai créé.FeinCMS admin inlines

Dans le code ci-dessous "CollapsiblePanel" n'apparaît pas dans l'admin car je veux seulement que vous soyez en mesure de créer "CollapsiblePanels" de la section ContentBox.

Vous pouvez également créer plusieurs RepliPanel pour chaque ContentBox. Je vais avoir du mal à comprendre comment câbler cela ensemble si l'administrateur vous permet d'ajouter les CollapsiblePanels à l'intérieur du ContentBox

class CollapsiblePanel(models.Model): 
    title = models.CharField(max_length=255) 
    content = models.TextField() 

    def render(self, **kwargs): 
     return render_to_string('collapsiblepanel.django.html', { 
      'media': self, 
      'title': mark_safe(self.title), 
      'text': mark_safe(self.content), 
     }) 

class ContentBoxMedia(RichTextContent): 
    title = models.CharField(_('title'), max_length=200, blank=True) 
    collapsible = models.BooleanField() 
    collapsiblePanels = models.ForeignKey(CollapsiblePanel) 

    class Meta: 
     abstract = True 
     verbose_name = 'Content Box' 
     verbose_name_plural = 'Content Box' 

    def render(self, **kwargs): 
     return render_to_string('contentbox.django.html', { 
      'media': self, 
      'title': mark_safe(self.title), 
      'text': mark_safe(self.text), 
     }) 
+0

Il semble qu'il y ait deux problèmes avec ce code. Premièrement, le ForeignKey à CollapsiblePanel est probablement faux - il devrait être l'inverse en juger par votre description. Deuxièmement, il n'est pas possible d'utiliser l'édition en ligne dans les inlines - le stock Django ne le permet pas, donc FeinCMS non plus. –

+0

Ha ha; comme je l'ai expliqué dans ma réponse tout à l'heure ... Bonjour Matthias :) – DrMeers

Répondre

2

Si vous devriez être en mesure d'avoir plusieurs CollapsiblePanel s par ContentBoxMedia, vos relations sont mis en place la mauvais sens - le ForeignKey devrait être dans CollapsiblePanel à la place.

Cependant, il semble que ce que vous cherchez est pour la gestion automatisée de votre CollapsiblePanel "inline"? Cela ne fonctionnera pas immédiatement car FeinCMS gère tous les types de contenu comme des inlines eux-mêmes (donc les objets ContentBoxMedia sont déjà traités comme des inlines de l'objet parent), et Django ne supporte pas nested inlines. Je soupçonne tout piratage de fournir une telle fonctionnalité serait horriblement complexe; vous pouvez essayer de rendre votre propre jeu de formulaires dans le modèle ContentBoxMedia, mais vous devrez pirater la méthode ItemEditor.change_view pour gérer les données, ce qui ne fonctionnerait pas facilement. Alternativement, vous pouvez éviter cela en adoptant une approche Ajax, mais cela ne fonctionnerait qu'en sauvéContentBoxMedia objets et pas les nouveaux.

Vous pouvez également essayer d'enregistrer ContentBoxMedia avec admin directement de sorte que vous pouvez utiliser CollapsiblePanel inlines, mais cela nécessite de quitter la page d'administration principale de FeinCMS pour les éditer séparément. Si vous souhaitez explorer cela, vous devrez utiliser Base.content_type_for et enregistrer le modèle résultant avec votre AdminSite (et bien sûr explicitement enregistrer un inline).

+0

Merci pour vos réponses. Voici ce que j'ai trouvé, mais maintenant j'ai un problème de rendu. [Code Pastebin] (http://pastebin.com/wC58qgy0) Le problème de rendu est le fait que feincms ne rendra pas ce que je sélectionne dans la liste déroulante. Je ne suis pas sûr de ce que ma fonction de rendu devrait ressembler. – Jeremy

+0

Pourriez-vous fournir un exemple simple de comment je voudrais nous cela? [Base.content_type_for] (http://www.feinheit.ch/media/labs/feincms/contenttypes.html#obtaining-a-concrete-content-type-model) – Jeremy

+0

C'est un lien vers la documentation, qui a un simple exemple d'utilisation 'x = MyBaseModel.content_type_for (ContentBoxMedia)' alors 'admin.site.register (x)' ou similaire. Mais ne perdez pas de temps à ce sujet, à moins d'être certain de comprendre ce que cela implique. Votre exemple de modèle mis à jour ne semble pas être abstrait, ce qui signifie qu'il ne peut pas être utilisé comme un type de contenu FeinCMS de toute façon. – DrMeers

Questions connexes