I have a Django model that used to look like this:
class Car(models.Model):
manufacturer_id = models.IntegerField()
There is another model called Manufacturer
that the id
field refers to. However, I realized that it would be useful to use Django's built-in foreign key functionality, so I changed the model to this:
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
This change appears to work fine immediately, queries work without errors, but when I try to run migrations, Django outputs the following:
- Remove field manufacturer_id from car
- Add field manufacturer to car
Doing this migration would clear all the existing relationships in the database, so I don't want to do that. I don't really want any migrations at all, since queries like Car.objects.get(manufacturer__name="Toyota")
work fine. I would like a proper database foreign key constraint, but it's not a high priority.
So my question is this: Is there a way to make a migration or something else that allows me to convert an existing field to a foreign key? I cannot use --fake
since I need to reliably work across dev, prod, and my coworkers' computers.
You can do data migration
I am not sure, there might be another solution where you can rename the field to name you want to, then alter the filed to new type (do a migration)
operations = [
migrations.RenameField(
model_name='car',
old_name='manufacturer_id',
new_name='manufacturer',
),
migrations.AlterField(
model_name='car',
name='manufacturer',
field=ForeignKey(blank=True, null=True,
on_delete=django.db.models.deletion.CASCADE
),
]