如何将自定义 id 字段转换为普通整数字段?

Posted

技术标签:

【中文标题】如何将自定义 id 字段转换为普通整数字段?【英文标题】:How to convert custom id field to normal integer field? 【发布时间】:2017-10-18 12:14:33 【问题描述】:

我正在拼命尝试与 Django 迁移相处,请帮助!

这就是我所拥有的:

class ReceiptNumber(models.Model):
    id = models.AutoField(primary_key=True, unique=True)

这是我需要的:

class ReceiptNumber(models.Model):
    number = models.IntegerField()

"number" 应该包含之前在 id 中的数据。这样做时,Django 会创建默认 ID 字段。这个需要和以前一样具有相同的 ID,以免破坏与其他表的关系。

你能帮忙吗?我尝试了很多东西来解决这个问题,但我真的不知道该怎么做。我需要一步一步的指南。合乎逻辑的方法是克隆 id 字段,但我不知道如何以及在哪里这样做。

非常感谢您的帮助!已经在这上面浪费了几天了。_。

【问题讨论】:

【参考方案1】:

number 字段添加到ReceiptNumber 模型后,运行makemigrations。现在更改迁移中的operations 列表以执行以下操作:

# This is your migration
from django.db import migrations, models

def copy_id_to_number(apps, schema_editor):
    ReceiptNumber = apps.get_model('receipts_app', 'ReceiptNumber')

    for receipt_number in ReceiptNumber.objects.all():
        receipt_number.save()


class Migration(migrations.Migration):

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

    operations = [
        migrations.AddField(
            model_name='receiptnumber',
            name='number',
            field=models.IntegerField(default=1),
            preserve_default=False,
        ),
        migrations.RunPython(copy_id_to_number),
    ]    

 

# This should be in your models

class ReceiptNumber(models.Model):
    number = models.IntegerField()

    def save(self, *args, **kwargs):
        """
        Overriden to ensure the `number` field is always the same as the `id`.
        """
        # make sure `id` is set
        if not self.pk:
            super().save(*args, **kwargs)

        if not self.number:
            self.number = self.pk

        return super().save(*args, **kwargs)

【讨论】:

您好,感谢您的输入,但我只需要数字字段为整数。没有唯一性,也没有主键。 Instaed 我需要默认 ID 字段作为 pk 并且只想在数字字段中包含当前数据。 你希望这个号码在数据库中吗?

以上是关于如何将自定义 id 字段转换为普通整数字段?的主要内容,如果未能解决你的问题,请参考以下文章

查询数据时,Prisma 将自定义字段附加到 info 参数

将自定义字段添加到 Hibernate Envers 修订表 (revinfo),如 operation_id。哪个是操作实体的PK

如何将自定义字段添加到 WooCommerce 注册表单

Django Allauth - 如何将自定义 CSS 类添加到字段?

如何使用 drupal 6 中的自定义字段将自定义版本的节点/添加表单放在视图中?

如何通过 API 将自定义字段添加到 SalesForce 中的布局部分