前段时间我停止使用@register_snippet 来装饰片段。这会将片段从管理的片段部分中取出。相反,为了方便用户,我使用 wagtail_hooks.py 直接在左侧管理面板中显示代码段。见下文。这很好用,因为用户可以直接转到代码段,您还可以更改显示的字段和字段的顺序 - 很好。
所以在下面的例子中,我删除了@register_snippet 的行。有什么问题?SnippetChooserPanel 不起作用!后来我在构建一个复杂的模型,SnippetChooserPanel 不起作用。我浪费了很多时间认为问题出在我的模型的复杂性上。我想节省别人的时间!
wagtail_hooks.py:
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from wagtail.wagtailsnippets.models import register_snippet
from demo.models import Advert
class AdvertAdmin(ModelAdmin):
model = Advert
modeladmin_register(AdvertAdmin)
以下是 Wagtail 的代码片段示例:
@register_snippet #<------- Source of issue (I removed this line!)
@python_2_unicode_compatible # provide equivalent __unicode__ and __str__ methods on Python 2
class Advert(models.Model):
url = models.URLField(null=True, blank=True)
text = models.CharField(max_length=255)
panels = [
FieldPanel('url'),
FieldPanel('text'),
]
def __str__(self):
return self.text
class BookPage(Page):
advert = models.ForeignKey(
'demo.Advert',
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name='+'
)
content_panels = Page.content_panels + [
SnippetChooserPanel('advert'),
# ...
]