Django数据库迁移:将两个字段合并为一个

时间:2016-01-08 00:27:49

标签: python django database-migration django-migrations django-database

假设我有一个代表我公司产品的模型。每个产品都有一个产品编号(例如5928523),以及一个表示它是否是实验产品的布尔值。

class Product(models.Model):

    product_number = models.IntegerField()
    experimental = models.BooleanField(default=False)

假设我想将这两个字段合并为一个字符字段,即产品ID。因此,产品编号为3892的实验产品将变为“X3892”,而产品编号为937的非实验产品将变为“937”。

class Product(models.Model):

    product_id = models.CharField()

如何在Django中编写数据库迁移来实现此目的?

1 个答案:

答案 0 :(得分:2)

我没有测试过,但这样的事情应该有效。首先创建一个迁移以添加product_id

然后创建一个空迁移并根据需要调整create_product_id

请记住更改应用名称的yourappname。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models

def create_product_id(apps, schema_editor):
    Product = apps.get_model("yourappname", "Product")
    for product in Product.objects.all():
        p_id = str(product.product_number)
        if product.experimental:
            p_id = "X" + p_id
        product.product_id = p_id
        product.save()

class Migration(migrations.Migration):
    initial = True

    dependencies = [
        ('yourappname', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(create_product_id),
    ]