'ProgrammingError: cannot cast type bigint to uuid' в Django

Я перевел разработку своего сайта на использование Docker. Я заменил sqlite в качестве базы данных на postgresql, затем выполнил команду docker-compose exec web python manage.py migrate в среде Docker, и она выдала следующую ошибку:

Я не смог найти никаких рабочих решений. Я переименовал поле 'id' и запустил миграции, но в итоге все равно получил те же ошибки. Я удалил все записи в своей базе данных, изменил поле с Charfield на UUIDField, но ошибка не исчезла.

Вот мой models.py:

class RequirementsChat(models.Model):
    id = models.CharField(primary_key=True, max_length=38)
    #id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, max_length=37)
    alias = models.CharField(max_length=20, blank=True, null=True)
    email = models.CharField(max_length=80, blank=True, null=True)
    language = models.CharField(max_length=10, blank=True, null=True)
    due_date = models.CharField(max_length=10, blank=True, null=True)
    subtitle_type = models.CharField(max_length=10, blank=True, null=True)
    transcript_file_type = models.CharField(max_length=10, blank=True, null=True)
    additional_requirements = models.TextField(max_length=500, blank=True, null=True)
    date = models.DateTimeField(auto_now_add=True, blank=True, null=True)
    url = models.CharField(max_length=250, blank=True, null=True)
    task_completed = models.BooleanField(default=False)
    
class UploadedFile(models.Model):
    input_file = models.FileField(upload_to='files')
    chat_id = models.CharField(max_length=33, null= True)
    requirements_chat = models.ForeignKey(RequirementsChat, on_delete=models.CASCADE, related_name='files', null=True)

Есть предложения?

Вам придется

  1. Скопируйте данные из исходного файла во временное поле
  2. .
  3. Создайте новое поле UUID
  4. Скопируйте данные из временного поля в новое UUID-поле
  5. .

Для шага 1

class RequirementsChat(models.Model):
    id_temp = models.UUIDField(default=uuid.uuid4, unique=True)
    ###

Тогда вам придется делать миграции python manage.py makemigrations

Теперь шаг 2

from django.db import migrations

def copy_id_to_id_temp(apps, schema_editor):
    RequirementsChat = apps.get_model('yourappname', 'RequirementsChat')
    for chat in RequirementsChat.objects.all():
        chat.id_temp = uuid.UUID(chat.id)
        chat.save()

class Migration(migrations.Migration):

    dependencies = [
        ('yourappname', 'previous_migration'),
    ]

    operations = [
        migrations.RunPython(copy_id_to_id_temp),
    ]

Запустите миграцию с помощью python manage.py migrate

Шаг 3

class RequirementsChat(models.Model):
    id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True)
    ###

Сделайте последний makemigrations и migrate в последний раз

Вернуться на верх