You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将单个Django Fixture JSON拆分为两个JSON文件?

用Python拆分Django Fixture JSON数据

完全可以用Python的json库来实现这个拆分需求,比直接做字符串处理更可靠——毕竟JSON存在嵌套结构,字符串操作很容易出错。

下面是具体的实现步骤和代码示例:

  1. 定义字段规则:先明确哪些字段属于music模型,哪些属于meta模型。假设你的多语言名称字段是name_zh、name_en这类,元数据字段是release_date、genre、duration等(可根据实际字段名调整)。
  2. 读取原始Fixture:把JSON文件加载成Python字典列表。
  3. 拆分数据:遍历每个条目,分别生成music和meta模型的Fixture数据。
  4. 写入新文件:把拆分后的数据分别写入两个JSON文件。

示例代码:

import json

# 读取原始fixture文件
with open('original_music_fixture.json', 'r', encoding='utf-8') as f:
    original_data = json.load(f)

# 定义字段拆分规则
music_fields = ['creator', 'key', 'name_zh', 'name_en']  # 替换成你的多语言名称字段
meta_model_name = 'meta'

music_fixture = []
meta_fixture = []

for item in original_data:
    # 处理music模型的fixture
    music_item = {
        'model': item['model'],
        'pk': item['pk'],
        'fields': {k: v for k, v in item['fields'].items() if k in music_fields}
    }
    music_fixture.append(music_item)

    # 处理meta模型的fixture
    meta_fields = {k: v for k, v in item['fields'].items() if k not in music_fields}
    if meta_fields:
        meta_item = {
            'model': meta_model_name,
            'pk': item['pk'],
            'fields': meta_fields
        }
        meta_fixture.append(meta_item)

# 写入拆分后的fixture文件
with open('music_fixture.json', 'w', encoding='utf-8') as f:
    json.dump(music_fixture, f, ensure_ascii=False, indent=2)

with open('meta_fixture.json', 'w', encoding='utf-8') as f:
    json.dump(meta_fixture, f, ensure_ascii=False, indent=2)

注意事项

  • 如果你有多语言名称字段的统一命名规则(比如以name_开头),可以用字符串匹配批量获取字段:[k for k in item['fields'] if k.startswith('name_')],不用逐个枚举。
  • 要确保meta模型的字段和拆分出来的字段完全对应,否则导入Fixture时会报错。
  • 原始数据中有嵌套字段也能正常处理,json库会自动保留字典结构。

内容的提问来源于stack exchange,提问作者H C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:21:02