2017-08-03 1 views
2

Je voudrais organiser les éléments de site communs dans un endroit approprié. Par exemple, les éléments de pied de page de site. Autant que je sache, les paramètres du site sont une bonne approche. Tout allait bien jusqu'à ce que je décide d'ajouter un modèle Orderable pour pouvoir créer une sorte de liste itérative avec certains éléments contenant des attributs "texte", "lien URL". J'ai rencontré un problème, la façon habituelle que j'avais l'habitude d'appliquer dans les modèles de pages ne m'a pas aidé. Voici le code:Ajouter le modèle personnalisable aux paramètres personnalisés dans Wagtail CMS

@register_setting 
class SiteFooterSettings(BaseSetting): 
    class Meta: 
     verbose_name = _('Footer Settings') 

    blog_title = models.CharField(_('Title'), max_length=50, null=True, blank=True) 
    blog_article_button_text = models.CharField(_('Article Button Text'), max_length=50, null=True, blank=True) 

    panels = [ 
     MultiFieldPanel(
      heading=_('Our Blog'), 
      children=[ 
       FieldPanel('blog_title'), 
       FieldPanel('blog_article_button_text'), 
      ], 
      classname='collapsible' 
     ), 

     MultiFieldPanel(
      heading=_('Blog Menu Items'), 
      children=[ 
       InlinePanel('blog_menu_items', label=_('Blog Menu Item')), 
      ], 
      classname='collapsible' 
     ), 
    ] 


class SettingsBlogMenu(Orderable): 
    page = ForeignKey('ds.SiteFooterSettings', related_name='blog_menu_items') 
    blog_menu_item = models.CharField(_('Item'), max_length=70, null=True, blank=True) 
    blog_menu_item_url = models.CharField(_('URL'), max_length=70, null=True, blank=True) 

    panels = [ 
     FieldPanel('blog_menu_item'), 
     FieldPanel('blog_menu_item_url') 
    ] 

Habituellement j'utiliser ParentalKey pour lier ce genre de liste à une page. Bien que pendant la migration, Django lance une erreur et conseille de la changer en clé étrangère. Enfin, je reçois « KeyError à/admin/settings/ds/sitefootersettings/2/ 'blog_menu_items'

Quel est le problème ici? Merci.

Répondre