在 wagtail 中将项目附加到流场

问题描述 投票:0回答:1

我有一个正在工作的流场,并且有数据,我为此编写的代码看起来像:

class NewYearBlock(blocks.StructBlock):
  year = blocks.IntegerBlock(verbose_name="Year (the year this data is rolling into)")
  holidayRollover = blocks.FloatBlock(verbose_name="How many hours are rolling over")
  overtimeRollover = blocks.FloatBlock(verbose_name="How many hours are rolling over")
  class Meta:
      icon = 'user'

newyearStream = StreamField([
    ('newyear', NewYearBlock()),
], blank=True)

我想做的是通过一些代码将一个项目附加到这个流域,我知道如何用下面的代码替换这个项目(有效)

employeeModel.newyearStream = newyearStream
employeeModel.save()

但这取代了已经存在的东西。

然后我想我可以遍历现有的流,然后创建一个新的对象来保存,但是当我尝试这样做时,我收到了

TypeError: cannot unpack non-iterable StreamChild object
所以我查看了类型,看到它是
<class 'wagtail.core.blocks.stream_block.StreamValue'>

任何人都可以帮助我指明正确的方向,要么循环遍历流并得出我的结果,要么以更好的方式附加到我的 streamField。

感谢您的帮助, 丹

django wagtail wagtail-streamfield
1个回答
0
投票

来自文档:“StreamField 的值表现为列表,在将实例保存回数据库之前可以插入、覆盖和删除块。可以将新项目作为元组写入列表(block_type ,价值)。”

# Append a rich text block to the stream
from wagtail.rich_text import RichText
my_page.body.append(('paragraph', RichText("<p>And they all lived happily ever after.</p>")))

# Save the updated data back to the database
my_page.save()
© www.soinside.com 2019 - 2024. All rights reserved.