Поменять поле для ключа в модели. Django
Может кто сталкивался и находил решение без дампа и удаления таблиц. Не могу себе позволить выключить базу данных на проде.
Есть модель:
class Invoice(models.Model):
ppm_client = models.ForeignKey(AvardeClient, on_delete=models.CASCADE)
invoice_id = models.BigIntegerField(primary_key=True, default=None)
invoice_j = models.JSONField(default = dict)
isArchive = models.BooleanField(default=False)
isPogoSent = models.BooleanField(default=False)
Хочу удалить primary_key=True для поля invoice_id и сделать миграцию с автоматическим добавлением поля id и внесенеим в каждую запись автоинкремент по данному полю.
Есть ли решение, без удаления записей\таблиц из базы?
Версия django: Django 3.2.5
Ответы (1 шт):
Автор решения: Welis
→ Ссылка
удалите primary_key у поле invoice_id добавьте поле id создайте миграцию
Потом добавьте запуск функции в миграции после создание айди поле, например:
from django.db import migrations, models
from django.db.models import F
def change_id(apps, schema_editor):
Invoice = apps.get_model('APP_NAME', 'Invoice')
Invoice.objects.update(id=F('invoice_id'))
class Migration(migrations.Migration):
dependencies = [
# нужные зависимости, которые указал джанго при создание файл миграции
]
operations = [
# Добавление нового поле id
migrations.RunPython(
change_id,
reverse_code=migrations.RunPython.noop,
),
# удаление праймери кей у поле invoice_id
]
вроде так можно решить)