РЕДАКТИРОВАТЬ Сначала создайте резервную копию БД
Сначала создайте новое временное отношение FK
_city = models.ForeignKey(...)
и выполните миграцию
python manage.py makemigration
python manage.py migrate
Затем вам нужно создать новые данные миграция в соответствующем приложении, создав пустой файл миграции:
python manage.py makemigration --empty myhouseapp
и в этом файле вручную назначить новые отношенияот М2М до ФК.Это будет выглядеть примерно так:
from django.db import migrations
def save_city_fk(apps, schema):
City = apps.get_model('myapp', 'City')
House = apps.get_model('myapp', 'City')
for house in House.objects.all():
house._city = house.cities.all().first() # Or whatever criterea you want
house._city.save()
def save_city_m2m(apps, schema):
# This should do the reverse
City = apps.get_model('myapp', 'City')
House = apps.get_model('myapp', 'City')
for house in House.objects.all():
if house._city:
house.cities.add(house._city)
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.RunPython(save_city_fk, save_city_m2m)
]
Удалите поле M2M и создайте другую миграцию.
python manage.py makemigrations
Переименуйте FK из _city
в city
и создайте окончательную миграцию
python manage.py makemigrations
Затем мигрируйте:
python manage.py migrate