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