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

标签 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)时,在 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/

相关文章:

python - 卡住不允许识别模式的线程

java - FASTQC 在命令行上运行,但不在 python 子进程中运行(Java 异常(exception))

django - 如何在 Django 中管理.py loaddata

python - django:控制json序列化

python - 在映射函数的列表推导式中传递命名参数

python - 从opencv videowriter api运行gstreamer管道命令以将连续图像流式传输到hlssink

python - 我想打印日志文件中的所有消息

django - 为什么 Docker Django 管理员崩溃并显示代码 245

python - pip-3.3 安装 MySQL-python

python - 我无法在 python 中使用 zeep - 缺少元素 CallbackURL 错误