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

如何在Django中将两个模型的表数据合并为一个模型(表)

合并Django关联模型为新表的实现方案

1. 创建整合所有字段的新模型

直接把两个原模型的所有字段合并到新模型中,去掉外键关联,保留每个字段的原有属性(如字段类型、null=True等):

class CombinedLocationData(models.Model):
    # 来自NewJsonData的字段
    speed = models.IntegerField()
    heading = models.IntegerField()
    altitude = models.FloatField()
    accuracy = models.FloatField()
    longitude = models.FloatField()
    altitudeAccuracy = models.FloatField(null=True)
    latitude = models.FloatField()
    
    # 来自NewApiJsonData的字段
    _id = models.CharField(null=True, max_length=100)
    mocked = models.BooleanField()
    timestamp = models.FloatField()
    _v = models.IntegerField(null=True)
    createdAt = models.CharField(null=True, max_length=100)
    updatedAt = models.CharField(null=True, max_length=100)

2. 迁移现有数据到新表

如果需要把旧表的已有数据迁移过来,按以下步骤操作:

  1. 执行命令生成空的迁移文件:
python manage.py makemigrations --empty yourappname
  1. 打开生成的迁移文件,修改operations部分,添加数据迁移逻辑:
from django.db import migrations

def migrate_old_data(apps, schema_editor):
    # 获取旧模型
    NewJsonData = apps.get_model('yourappname', 'NewJsonData')
    NewApiJsonData = apps.get_model('yourappname', 'NewApiJsonData')
    # 获取新模型
    CombinedLocationData = apps.get_model('yourappname', 'CombinedLocationData')
    
    # 遍历所有NewApiJsonData记录,关联对应的NewJsonData后插入新表
    for api_data in NewApiJsonData.objects.all():
        if api_data.coords:
            CombinedLocationData.objects.create(
                # 复制NewJsonData的字段
                speed=api_data.coords.speed,
                heading=api_data.coords.heading,
                altitude=api_data.coords.altitude,
                accuracy=api_data.coords.accuracy,
                longitude=api_data.coords.longitude,
                altitudeAccuracy=api_data.coords.altitudeAccuracy,
                latitude=api_data.coords.latitude,
                # 复制NewApiJsonData的字段
                _id=api_data._id,
                mocked=api_data.mocked,
                timestamp=api_data.timestamp,
                _v=api_data._v,
                createdAt=api_data.createdAt,
                updatedAt=api_data.updatedAt
            )

class Migration(migrations.Migration):
    dependencies = [
        ('yourappname', '00xx_your_previous_migration'),  # 替换为实际的依赖迁移编号
        ('yourappname', '00xx_combinedlocationdata'),  # 替换为新模型对应的迁移编号
    ]

    operations = [
        migrations.RunPython(migrate_old_data),
    ]
  1. 执行迁移命令完成数据同步:
python manage.py migrate

注意:替换代码中的yourappname为你的实际应用名称,迁移编号也要对应实际生成的编号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:36:18