'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)
Есть предложения?
Вам придется
- Скопируйте данные из исходного файла во временное поле .
- Создайте новое поле UUID
- Скопируйте данные из временного поля в новое UUID-поле .
Для шага 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
в последний раз