如何在Wagtail Page.title字段中提供默认值?

时间:2019-04-22 16:01:26

标签: django python-3.x django-models wagtail

我所需要的只是随机生成的页面标题,其中包括:

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:类'MyBasePage'中的本地字段'title'与基类'Page'中同名的字段发生冲突。

任何想法如何实现这一目标? 为了方便起见,在源代码中url

2 个答案:

答案 0 :(得分:0)

您正试图覆盖Wagtail页面随附的title属性,并且会收到此错误:

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"

最后,请注意,最后一行在已定义的类之外—这就是我们摆脱在一行代码中更改默认标题的方式。

答案 1 :(得分:0)

我认为您必须使用模型的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()