繁体   English   中英

g-可以在迁移中重命名流域中的项目吗?

[英]Wagtail - Possible to rename an item in a streamfield in a migration?

我更改了StreamField中项目的名称,从

tiles = StreamField(
    [
        ('items', StructBlock([
                ('icon', ImageChooserBlock()),
                ('text', CharBlock()),
            ])
         ),
    ], blank=True)

tiles = StreamField(
    [
        ('info', StructBlock([
                ('icon', ImageChooserBlock()),
                ('text', CharBlock()),
            ])
         ),
     ], blank=True)

您知道如何创建迁移以重命名该字段吗?

流字段数据以JSON的形式存储为具有'type'和'value'属性的项目列表。 要将字段名称更改应用于所有页面,您应该能够创建一个空迁移(或将其添加到现有迁移中),然后添加以下功能或类似于您的迁移文件的内容,然后运行它:

// other imports

import json

def convert_streamfield_name(apps, schema_editor):
    db_alias = schema_editor.connection.alias

    MyPageModel = apps.get_model('myapp', 'MyPageModel')
    pages = MyPageModel.objects.using(db_alias).all()
    for page in pages:
        revised_stream_data = []
        stream_data = page.tiles.stream_data

        for data in stream_data:
            if data.get('type') == 'items':
                value = data.get('value')
                revised_stream_data.append({
                    'type': 'info'
                    'value': value
                })
            else:
                revised_stream_data.append(data)

        raw_json = json.dumps(revised_stream_data)
        page.tiles = raw_json
        page.save()


class Migration(migrations.Migration):

    dependencies = [...]

    operations = [
        migrations.RunPython(convert_streamfield_name),
        ...
    ] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM