如何在Django中通过外键引用其他模型的模型中添加新列

时间:2019-10-03 12:24:40

标签: python django

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

1 个答案:

答案 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")