我犯了一个错误,并将模型的PK设置为UUID:
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False)
我想将其还原为Django的默认值,其中每个实例自动具有PK,没有ID模型字段。我怎样才能做到这一点?谢谢!
当我尝试仅删除id字段时进行更新:
python manage.py makemigrations
哪位给了我
- Alter field id on organization
python manage.py migrate
哪位给了我
LINE 1: ...nization" ALTER COLUMN "id" TYPE integer USING "id"::integer
希望这会有所帮助!
答案 0 :(得分:0)
由于注释中的解决方案似乎难以遵循,因此这是一个更简单的想法,可能更易于实现:
。
class OriginalModel(models.Model):
id = models.UUIDField(primary_key=True)
random_field = models.BooleanField()
class FKModel(models.Model):
fk = models.ForeignKey(OriginalModel)
my_field = models.BooleanField()
# new model with default `id` column
class NewOriginalModel(models.Model):
random_field = models.BooleanField()
# new model bound by foreign key
class NewFKModel(models.Model):
fk = models.ForeignKey(NewOriginalModel)
my_field = models.BooleanField()
# load old models and recreate them manually
for old_model in in OriginalModel.objects.all():
# eventually use django.forms.models.model_to_dict instead
new_model = NewOriginalModel(random_field=old_model.random_field)
new_model.save()
# recreate all models bound by foreign keys
old_fks = FKModel.objects.filter(fk=old_model)
for old_fk in old_fks:
new_fk = NewFKModel(my_field=old_fk.my_field, fk=new_model)
new_fk.save()