你试图添加一个不可空的字段' description'没有默认的葡萄酒

时间:2017-07-09 08:55:24

标签: python django

我尝试添加描述列,并尝试在models.py中进行更改。但是,当我尝试迁移时,我收到此错误

C:\Users\Adhista Chapagain\Desktop\winerama>python manage.py makemigrations
You are trying to add a non-nullable field 'description' to wine without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option:

models.py代码如下所示:

from django.db import models
import numpy as np

class Wine(models.Model):
    name = models.CharField(max_length=200)
    images = models.ImageField(null = True, blank=True)
    description = models.CharField(max_length=200)

和load_wine的代码

def save_wine_from_row(wine_row):
    wine = Wine()
    wine.id = wine_row[0]
    wine.name = wine_row[1]
    wine.images = wine_row[2]
    wine.description = wine_row[3]
    wine.save()

2 个答案:

答案 0 :(得分:1)

错误告诉您正在尝试将列添加到没有默认值的现有表中,但不允许为空。所以这是一个不可能的情况 - 要么它应该有一个默认值,要么使它成为" null"在数据库中。除非您提供解决方案,否则迁移无法继续。

所以你没有多少选择:

  1. 提供一个默认值,该值将应用于所有现有记录。
  2. 使字段可选(即设置null=True)。
  3. 在模型(default="No Description"
  4. 中为其指定默认值

    只需选择一个选项,然后迁移即可。

答案 1 :(得分:0)

当您将字段添加到已存在的模型时,如果这些字段不是可空的' (即,您在该字段上没有null=True)然后您需要为迁移提供一个默认值,以用于该模型的数据库中的所有现有行。目前还不知道是否存在,所以即使数据库为空,也必须这样做。

只需选择其中一个选项并提供默认值(即使这只是一个空字符串)。