使用FOR循环生成Wagtail字段

时间:2018-10-04 07:53:24

标签: python-3.x wagtail

我是Wagtail的新手,并希望通过遍历像这样的名称列表来在我的model.py中创建几个Field。

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)

1 个答案:

答案 0 :(得分:2)

这是行不通的,因为mySection = StreamField(...)只是重复定义了一个名为mySection的字段-Python无法知道要使用当前名称为的字段来定义字段 mySection

我认为实现此目的的唯一方法是在元类中设置字段,几乎可以肯定,与仅重复该行相比,这将更加复杂且可读性较低。参见How to dynamically set attributes to a class in models in Django?Dynamically create class attributes