Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Wagtail-是否可以在迁移中重命名streamfield中的项?_Python_Wagtail - Fatal编程技术网

Python Wagtail-是否可以在迁移中重命名streamfield中的项?

Python Wagtail-是否可以在迁移中重命名streamfield中的项?,python,wagtail,Python,Wagtail,我已将StreamField中项目的名称从更改为 tiles = StreamField( [ ('items', StructBlock([ ('icon', ImageChooserBlock()), ('text', CharBlock()), ]) ), ], blank=True) 到 知道如何创建迁移以重命名字段吗?Streamfield数据存储

我已将StreamField中项目的名称从更改为

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


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

Streamfield数据存储为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),
        ...
    ] 

太棒了,干杯。我想我真的应该写反向迁移,但很明显,一旦你知道它的一个方向,怎么做。
// 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),
        ...
    ]