我有一个名为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)时,django在python manage.py makemigrations
处引发错误:
django.db.utils.OperationalError: no such column: tank_shape.Column name
答案 0 :(得分:0)
您具有以下行,对于default
参数,您调用一个函数来获取Shape
模型的默认值:
shape = models.ForeignKey(Shape, on_delete=models.SET_DEFAULT,
default=get_default(Shape),
related_name="tanks")
但是Shape
模型变量name
没有默认值。并且Shape
本身将没有默认权限。 Shape
表中的字段将具有默认值,例如。 name
。 :
# 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")