簡體   English   中英

使用 PageChooserPanel 作為 Settings 中的 Orderable,獲取“'list' object has no attribute 'bind_to'”屬性錯誤

[英]Using PageChooserPanel as an Orderable in Settings, getting "'list' object has no attribute 'bind_to'" Attribute error

我正在嘗試在 Wagtail 中創建一個設置頁面,允許我手動選擇 1-5 個頁面,這些頁面將在我的網站上顯示為“最受歡迎的頁面”。

我在 Orderable 中使用 PageChooserPanel,但我收到了一個我不知道如何修復的屬性錯誤 - “'list' object 沒有屬性 'bind_to'”

使用的代碼如下:

from django.db import models
from wagtail.core.models import Page, Orderable
from wagtail.admin.edit_handlers import PageChooserPanel, FieldPanel, MultiFieldPanel, InlinePanel
from wagtail.contrib.settings.models import BaseSetting, register_setting
from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel

@register_setting
class MostPopularPosts(BaseSetting, ClusterableModel):
    display_most_popular_posts_in_sidebar = models.BooleanField("Display most popular posts in sidebar", default=True, help_text='Untick to hide the most popular posts widget')
    panels = [
        FieldPanel('display_most_popular_posts_in_sidebar'),
        InlinePanel('popular_page', max_num=5, min_num=1, label="Post"),
    ],

class MostPopularPostPages(Orderable):
    settings_page = ParentalKey(MostPopularPosts)    
    popular_page = models.ForeignKey(
        'wagtailcore.Page',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+',
        verbose_name="Page Link"
    )
    panels = [
        PageChooserPanel('popular_page'),
    ]

完整錯誤信息:

Internal Server Error: /admin/settings/home/mostpopularposts/2/
Traceback (most recent call last):
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\wagtail\admin\urls\__init__.py", line 127, in wrapper
    return view_func(request, *args, **kwargs)
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\wagtail\admin\auth.py", line 172, in decorated_view
    response = view_func(request, *args, **kwargs)
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\wagtail\contrib\settings\views.py", line 61, in edit
    edit_handler = get_setting_edit_handler(model)
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\wagtail\contrib\settings\views.py", line 38, in get_setting_edit_handler
    return edit_handler.bind_to(model=model)
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\wagtail\admin\edit_handlers.py", line 146, in bind_to
    new.on_model_bound()
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\wagtail\admin\edit_handlers.py", line 284, in on_model_bound
    self.children = [child.bind_to(model=self.model)
  File "C:\Users\willr\repos\mapbox\env\lib\site-packages\wagtail\admin\edit_handlers.py", line 284, in <listcomp>
    self.children = [child.bind_to(model=self.model)
AttributeError: 'list' object has no attribute 'bind_to'

我正在使用:鶺鴒 2.12、Django 3.1.6、Python 3.8.7、

對此的任何幫助將不勝感激。

您在第一個panels定義中有一個尾隨逗號:

panels = [
    FieldPanel('display_most_popular_posts_in_sidebar'),
    InlinePanel('popular_page', max_num=5, min_num=1, label="Post"),
],

(這導致 Python 將其解釋為嵌套列表而不是平面列表,這意味着當它遍歷面板定義時,它得到的是列表 object 而不是面板 object。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM