将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)