Можно ли использовать абстрактный базовый класс для нестраничных моделей в Wagtail? - PullRequest
0 голосов
/ 29 ноября 2018

Я смоделировал несколько нестраничных элементов как подклассы в трясогузке и искал класс Page как хороший пример того, чего я хотел бы достичь, но у меня есть две проблемы с реализацией:

  1. Я хотел бы иметь возможность иметь IndexView в администраторе, который показывает список элементов, а затем позволить пользователю нажимать Add Item, как они делают Add Page вРедактор страницы и выберите подпункт при создании.
  2. Я хотел бы использовать InlinePanel и, таким образом, использую отношение ParentalKey, но makemigrations дросселирует при создании миграций для этого изменения..

В models.py:

@register_snippet
class Foo(ClusterableModel):
    title = models.CharField(max_length=100, blank=True, null=True)

    def name(self):
        return self.title

    class Meta:
        abstract = True

class Bar(Foo):
    description = models.CharField(max_length=100, blank=True, null=True)

class Baz(Foo):
    pass

class Foofriends(Orderable):
    name = models.CharField(max_length=10, blank=True, null=True)
    friends = ParentalKey('appname.Foo', on_delete=models.CASCADE, related_name='foo_friends')

, а затем в wagtail_hooks.py:

class FooAdmin(ModelAdmin):
    model = Foo
    menu_icon = 'date'
    add_to_settings_menu = False  # or True to add your model to the Settings sub-menu
    exclude_from_explorer = False # or True to exclude pages of this type from Wagtail's explorer view
    list_display = ('title',)
    search_fields = ('title',)

modeladmin_register(FooAdmin)
  1. Администратор не 'Это не работает - ничего не отображается в них modeladmin, и когда я пытаюсь редактировать из раздела администрирования фрагментов, я получаю 404.

  2. Когда я пытаюсь создать миграцию ParentalKeyдля отношения Foofriends появляется следующая ошибка:

appname.Foofriends.friends: (fields.E300) Поле определяет отношение с моделью appname.Foo, которая либо не установлена, либо является абстрактной.appname.Foofriends.friends: (fields.E307) Поле appname.Foofriends.friends было объявлено с ленивой ссылкой на 'appname.foo', но приложение 'appname' не предоставляет модель 'foo'.

Обходным решением для первой проблемы может быть просто регистрация администраторов индивидуально для всех определенных классов, что немного не идеально, но выполнимо, но это не решит вторую проблему.

Возможно ли это вообще?Есть ли лучший подход?

...