Как указать значение по умолчанию в поле Wagtail Page.title? - PullRequest
1 голос
/ 22 апреля 2019

Все, что мне нужно, это просто случайно сгенерированный заголовок страницы, что-то между строк:

class MyBasePage(Page):
    title = models.CharField(
        default=uuid4,
        verbose_name=_('title'),
        max_length=255,
        help_text=_("The page title as you'd like it to be seen by the public")
    )

class OtherPage(MyBasePage):
    pass

В настоящее время я заблокирован следующей ошибкой:

django.core.exceptions.FieldError: Локальное поле 'title' в классе 'MyBasePage' конфликтует с полем с тем же именем из базового класса 'Page'.

Есть идеи, как этого добиться? Для удобства вот url к исходному коду.

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Я думаю, что вы должны использовать сигнал pre_init модели

from django.db.models.signals import pre_init
from django.dispatch import receiver

@receiver(pre_save, sender=MyBasePage)
def generate_home_title(sender, instance, *args, **kwargs):
    instance.title = randomly_title()
0 голосов
/ 22 апреля 2019

Вы пытаетесь перезаписать свойство title, которое поставляется со страницей Wagtail, и вы получите эту ошибку:

django.core.exceptions.FieldError: Local field 'title' in class 'MyBasePage' clashes with field of the same name from base class 'Page'.

Если вы хотите перезаписать значение Wagtail title по умолчанию, вы можетеустановите его с помощью этого фрагмента кода (последняя строка является важной):

class MyBasePage(Page):
    # Custom fields in here ...

MyBasePage._meta.get_field("title").default = "New Default Title"

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

...