如何在django上划分两个或更多的现有模型

时间:2016-06-14 01:12:16

标签: python sql django models

首先抱歉我的英语不好。

我有一个问题,我得到一个django应用程序进行一些更改,我要做的一件事是划分模型。因为应用程序中的某些模型太大了。但我不能松开数据库及其上的信息,因为有些模型有超过2000个对象。

我想我需要在SQL中进行一些查询,但也许有人可以帮我或者如何做到这一点。

这是我需要的例子

原始模型的示例

class order(models.Model):
        client = models.ForeignKey(Client)
        brand = models.CharField(max_length=50)
        dispositive = models.CharField(max_length=100)
        serial = models.CharField(max_length=100)
        work = models.CharField(max_length=50)
        detail = models.TextField()
        price = models.IntegerField(default=0)
        deposit = models.IntegerField(default=0)
        created_date = models.DateTimeField(
                default=timezone.now)

我需要在此

上拆分该模型
class Order(models.Model):
        client = models.ForeignKey(Client)
        created_date = models.DateTimeField(
                default=timezone.now)
        published_date = models.DateTimeField(
                blank=True, null=True)


class OrderDetail(models.Model):
        order = models.ForeignKey(Order)
        work = models.CharField(max_length=50)
        detail = models.TextField()
        price = models.IntegerField(default=0)
        deposit = models.IntegerField(default=0)


class OrderDispositive(models.Model):
        order = models.ForeignKey(Order)
        brand = models.CharField(max_length=50)
        dispositive = models.CharField(max_length=100)
        serial = models.CharField(max_length=100)

我真的不知道如何在不松动数据库中任何现有数据的情况下实现这一目标!

我知道在完成这些视图和模板后我必须修改以获得正确的数据,但我真的需要修复一些模型以备将来修改

感谢您的帮助!!!

1 个答案:

答案 0 :(得分:3)

您可以写own migrations

来完成此操作

步骤1:创建新模型而不删除原始模型。

第2步:然后运行makemigrations。

python manage.py makemigrations app_name
迁移前

修改迁移文件以将数据复制到其他表。

<强> your_new_migrations.py

def update_Orderdata(apps, schema_editor):
    old_order = apps.get_model("some_app", "order")

    for instance in old_order.objects.all():
        # copy data to new order

def update_OrderDetail(apps, schema_editor):
    # copy data new tables OrderDetail

def update_OrderDispositive(apps, schema_editor):
    # copy data to new table OrderDispositive

class Migration(migrations.Migration):

    dependencies = [
        # ... your existing dependencies
    ]

    operations = [


        # original migration, such:
        # new Order table table,
        # new OrderDetail table
        # new OrderDispositive table

        # add this operation  at last...

        migrations.RunPython(update_Orderdata, reverse_code=migrations.RunPython.noop),
        migrations.RunPython(update_OrderDetail, reverse_code=migrations.RunPython.noop),
        migrations.RunPython(update_OrderDispositive, reverse_code=migrations.RunPython.noop),

    ]

然后

python manage.py migrate app_name

步骤3:现在删除原始模型(班级订单)。并运行makemigration&amp;迁移

python manage.py makemigrations app_name
python manage.py migreate app_name

注意:在尝试上述解决方案之前,请先备份数据库。