我有一个名为 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/