Как рефакторить пару полей из одной модели в другую с помощью отношения FK

В настоящее время у меня есть модель

class Car(models.Model):
    name = models.CharField(max_length=20)
    manufacturer_name = models.CharField(max_length=20)
    manufacturer_url = models.URLField()

Теперь я хочу извлечь информацию о производителе в свою собственную модель, чтобы избавиться от лишних данных. Например, так:

class Manufacturer(models.Model):
    name = models.CharField(max_length=20)
    url = models.URLField()

class Car(models.Model):
    name = models.CharField(max_length=20)
    manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)

Однако инструмент миграции Django определяет это как "удаление полей" и "добавление полей". Может ли Django как-то сделать эту миграцию автоматически? Или мне придется писать эти миграции самому. Это кажется распространенным вариантом использования, поэтому я подумал, что, возможно, у Django есть что-то в запасе для ootb.

Нет, насколько мне известно, в django нет ничего, чтобы справиться с этой ситуацией. Я предлагаю сначала не удалять поле manufacturer_name из cars:

class Manufacturer(models.Model):
    name = models.CharField(max_length=20)
    url = models.URLField()

class Car(models.Model):
    name = models.CharField(max_length=20)
    manufacturer_name = models.CharField(max_length=20)
    manufacturer_url = models.URLField()
    manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)

##then using 
python manage.py shell 
from app.models import *
getallcars = Car.objects.all()
for car in getallcars:
    getmanufacturer,created = Manufacturer.objects.getorcreate(name=car.manufacturer_name ,manufacturer_url =car.manufacturer_url)

Тогда вы можете удалить manufacturer_name и manufacturer_url

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