gpt4 book ai didi

python - 如何向模型添加新列,该模型通过 django 中的外键引用其他模型

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:06 25 4
gpt4 key购买 nike

我有一个名为 Shape 的模型:

class Shape(models.Model):
name = models.CharField(max_length=40, unique=True)

还有另一个名为 Tank 的模型,它以 Shape 模型作为外键:

def get_default(model):
value, is_created = model.objects.get_or_create(name=0)
return value.id

class Tank(models.Model):
name = models.CharField(max_length=50)
shape = models.ForeignKey(Shape, on_delete=models.SET_DEFAULT,
default=get_default(Shape),
related_name="tanks")

当我尝试在 Shape 模型中添加新列(null=True)时,在 python manage.py makemigrations django 会引发错误:django.db.utils.OperationalError:没有这样的列:tank_shape.Column name

最佳答案

您有以下行,对于 default 参数,您调用一个函数来获取 Shape 模型的默认值:

shape = models.ForeignKey(Shape, on_delete=models.SET_DEFAULT,
default=get_default(Shape),
related_name="tanks")

但是 Shape 模型变量 name 没有默认值。并且 Shape 本身不会有默认值。 Shape 表中的字段将有一个默认值,例如。 名称。 :

# Your code
name = models.CharField(max_length=40, unique=True)

要获取默认值,您可以使用:

Shape._meta.get_field('name').get_default()

根据您最近的评论,尝试更改为以下代码:

shape = models.ForeignKey(Shape, on_delete=models.SET_DEFAULT,
related_name="tanks")

编辑:

给出完整的代码作为答案:

class Shape(models.Model):
name = models.CharField(max_length=40, unique=True)

class Tank(models.Model):
name = models.CharField(max_length=50)
shape = models.ForeignKey(Shape, on_delete=models.SET_DEFAULT,
default=1,
related_name="tanks")

关于python - 如何向模型添加新列,该模型通过 django 中的外键引用其他模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58219054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com