【问题标题】:Generate Wagtail Field's using a FOR loop使用 FOR 循环生成 Wagtail 字段
【发布时间】:2019-03-09 13:11:33
【问题描述】:

我是 Wagtail 的新手,想通过迭代这样的名称列表在我的 models.py 中创建几个字段 ...

class HomePage(Page):
    myFields = [ ('paragraph', blocks.RichTextBlock(classname="oneA")),('image', ImageChooserBlock()) ]

    mySections = ['sectionOne', 'sectionTwo', 'sectionThree']

    for mySection in mySections:
        mySection = StreamField(myFields,null=True,blank=True)

    content_panels = Page.content_panels + [
        StreamFieldPanel('sectionOne'), StreamFieldPanel('sectionTwo'), StreamFieldPanel('sectionThree'),
    ]

这会产生一条错误消息...

django.core.exceptions.FieldDoesNotExist:主页没有名为“sectionOne”的字段

有没有办法做到这一点,或者我必须像这样单独声明每个:

sectionOne = StreamField(myFields,null=True,blank=True)

【问题讨论】:

标签: python-3.x wagtail


【解决方案1】:

这不起作用,因为 mySection = StreamField(...) 只是重复定义了一个名为 mySection 的字段 - Python 无法知道您要定义一个具有当前给定名称的字段 in mySection.

我认为实现这一点的唯一方法是在元类中设置字段,这几乎肯定会比重复一行更复杂且可读性更低。见How to dynamically set attributes to a class in models in Django?Dynamically create class attributes

【讨论】:

  • 当然设置一个元类会否定我减少代码的目标。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 2012-01-21
  • 2013-12-16
  • 1970-01-01
  • 2020-07-18
  • 2021-01-14
  • 2016-08-12
  • 1970-01-01
相关资源
最近更新 更多