如何使用 FK 关系将几个字段从一个模型重构为另一个模型

问题描述 投票:0回答:1

我目前有一个模型

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 django-models django-migrations
1个回答
0
投票

据我所知,django 中没有任何东西可以处理这种情况 我的建议是首先不要从汽车中删除Manufacturer_name字段:

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

© www.soinside.com 2019 - 2024. All rights reserved.