2017-02-02 14 views
0

私はDjango Wagtailには比較的新しいので、私はhereというdocs.wagtail.ioのウェブサイトからデモをフォローしていましたが、InlinePanelと関連リンクを使ってページへのリンクを追加する方法については 私はそれが意味を完全に理解していないというエラーに達したようです。 エラーWagtail Inlinepanelデモ・エラー

from wagtail.wagtailcore.models import Orderable, Page 
from modelcluster.fields import ParentalKey 
from wagtail.wagtailadmin.edit_handlers import FieldPanel,InlinePanel 
from django.db import models 



class BookPage(Page): 
    # The abstract model for related links, complete with panels 
    class RelatedLink(models.Model): 
     title = models.CharField(max_length=255) 
     link_external = models.URLField("External link", blank=True) 

     panels = [ 
      FieldPanel('title'), 
      FieldPanel('link_external'), 
     ] 

     class Meta: 
      abstract = True 

    # The real model which combines the abstract model, an 
    # Orderable helper class, and what amounts to a ForeignKey link 
    # to the model we want to add related links to (BookPage) 
    class BookPageRelatedLinks(Orderable, RelatedLink): 
     page = ParentalKey('demo.BookPage', related_name='related_links') 

    content_panels = Page.content_panels + [ 
    InlinePanel('BookPageRelatedLinks', label="Related Links"), 
    ] 

私の主な目的は、このように私はBlogPage上のサイドバーにイメージリンクを追加することができます学ぶことでしたが、次のようにデモ用のコードがある

AttributeError: type object 'BookPageRelatedLinks' has no attribute 'rel'

語りますapp私は開発中です。

+0

Django、Wagtail、および 'django-modelcluster'パッケージのどのバージョンをインストールしましたか? (あなたは 'pip freeze'を実行して関連する行を探すことで見つけ出すことができます) – gasman

+0

バージョン1.8.1、' pip install wagtail'を使って取得しました。私はそれが最新だと仮定しました –

+0

OK、 Djangoと 'django-modelcluster'はどうですか? – gasman

答えて

1

あなたInlinePanel宣言はかなり正確ではない - それはする必要があります:

InlinePanel('related_links', label="Related Links") 

ここで何が起こっているのです:

  • related_name='related_links'でParentalKeyを定義することで、あなたはワンを設定しましたBookPageのrelated_linksと呼ばれる多対多の関係。これにより、特定のBookPageインスタンスに関連付けられているBookPageRelatedLinksオブジェクトをすべて取得できます(たとえば、BookPageインスタンスがpageとなっている場合は、page.related_links.all()と書くことができます)。
  • InlinePanel宣言は、管理者の中でrelated_linksプロパティを編集可能にするようWagtailに指示します。少し珍しいですが、まだ有効 -

あなたは誤解を招くようなエラーメッセージを取得している理由は、あなたがBookPage内部RelatedLinkBookPageRelatedLinksクラスを定義したということです。これにより、BookPageRelatedLinksがBookPageのプロパティとして定義されます(つまり、BookPage.BookPageRelatedLinks)。次に、WagtailがInlinePanelを設定しようとすると、そのプロパティを取得し、オブジェクトの期待されるタイプではないため(クラス定義でありリレーションではありません)、失敗します。

あなたが(またはそれ以上)以下に定義され、関連するモデルと、より従来の方法では、あなたのモデルファイルを、書く場合BookPage

class BookPage(Page): 
    content_panels = Page.content_panels + [ 
     InlinePanel('BookPageRelatedLinks', label="Related Links"), 
    ] 


# The abstract model for related links, complete with panels 
class RelatedLink(models.Model): 
    title = models.CharField(max_length=255) 
    link_external = models.URLField("External link", blank=True) 

    panels = [ 
     FieldPanel('title'), 
     FieldPanel('link_external'), 
    ] 

    class Meta: 
     abstract = True 


# The real model which combines the abstract model, an 
# Orderable helper class, and what amounts to a ForeignKey link 
# to the model we want to add related links to (BookPage) 
class BookPageRelatedLinks(Orderable, RelatedLink): 
    page = ParentalKey('home.BookPage', related_name='related_links') 

...あなたはより多くの有益なエラーになるだろう:AttributeError: type object 'BookPage' has no attribute 'BookPageRelatedLinks'を。

+0

と、そのエラーがそのエラーである場合の解決方法は、私のコードを修正する前の最初のエラーですBookPageクラス内で関連リンククラスを定義する –

+0

もう一度、 'InlinePanel( 'related_links'、label =" Related Links ")'を使用するように修正しました。 – gasman

関連する問題