我所需要的只是随机生成的页面标题,其中包括:
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。
答案 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()