0

しばらく前に @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'),
        # ...
    ]
4

2 に答える 2

0

解決策は常に @register_snippet デコレーターを使用することです。そうしないと、SnippetChooserPanel が機能しません。

@register_snippet
@python_2_unicode_compatible 
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
于 2018-07-19T23:59:04.957 に答える