如何在Django中将外键添加到现有类

Tes*_*man 0 database django class django-models

我有一个简单的国家和城镇模型:

from django.db import models

class Country(models.Model):
    name = models.CharField(max_length=50)

class Town(models.Model):
    belongs_to = models.ForeignKey(country, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

现在,我想稍微玩一下...,我想补充大陆。我想从一开始的正确方法就是这样做:

from django.db import models

class Continent(models.Model):
    name = models.CharField(max_length=50)

class Country(models.Model):
    belongs_to = models.ForeignKey(continent, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)

class Cown(models.Model):
    belongs_to = models.ForeignKey(country, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

如果我这样做并保存文件,则在admin.py中将大洲添加到admin.site.register(continent),从makemigrations开始...我得到了:

您正在尝试将不属于国家的不可为空的字段添加到国家/地区,而没有默认设置;我们无法做到这一点(数据库需要某种方式来填充现有行)。请选择一个修复程序:

1.)现在提供一个一次性默认值(将在所有现有行上设置此列的空值)2.)退出,然后让我在models.py中添加默认值

我被困在这里,因为我不知道从这里做什么?

nik*_*k_m 5

我认为您收到的信息很容易解释。

您正在将belongs_to字段添加到country模型中(类应该以首字母大写命名,Country尽管如此),但是它被声明为不可为空。也就是说,必须声明一个值。

现在,由于您已经country填充了模型的某些行(对象),因此Django会询问您belongs_to应将哪些值添加到这些现有行中。

有两种解决方案:

  1. 添加一个整数(这将是对id的的continent模型),以所有这些,以后更改它,或
  2. 更改为,belongs_to = models.ForeignKey(continent, on_delete=models.CASCADE, null=True, blank=True)以便migrate此字段后可以为空,因此现有行的该字段为null

希望你能理解。