您试图在没有默认值的情况下向contact_info添加不可为空的字段"id"

sha*_*ank 15 python django django-models python-2.7

我只是使用简单的命令python manage.py makemigrations

但是,我得到的只是这个错误:

You are trying to add a non-nullable field 'id' to contact_info 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)
2) Quit, and let me add a default in models.py
Run Code Online (Sandbox Code Playgroud)

这是models.py:

class Document(models.Model):
    docfile = models.FileField(upload_to='documents/')


class contact_number(models.Model):
    contact_numbers= models.CharField(max_length=13)

class contact_address(models.Model):
    address = models.CharField(max_length=100)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=50)
    zip = models.CharField(max_length=5)

class contact_info(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    contact_numbers=models.ManyToManyField(contact_number)
    addresses=models.ManyToManyField(contact_address)
Run Code Online (Sandbox Code Playgroud)

meh*_*met 27

当一个不同的字段被标记为primary_key=True早期的主键并且您正在删除它(在django尝试添加id主键的情况下)时会发生这种情况.

django要求主键的默认值似乎是一个错误.

若要解决此问题,请按照下列步骤操作:

1)在makemigrations期间提示时提供随机默认值.

2)转到生成的迁移文件(在下面your_app\migrations\并删除default=x,,x是您在步骤1中提供的随机值

3)当您处于迁移文件时,请确保操作顺序有意义(例如,在添加另一个主键之前删除/更改一个主键).保存并关闭.

4)像往常一样迁移.

  • 是的,这是问题和解决方案,它确实是一个错误似乎,批准的解决方案是不对的. (4认同)

pyc*_*333 13

您可以设置`default =“,也可以设置editable = False。

例如first_name = models.CharField(max_length=50, default="", editable=False)

无需添加ID字段。Django将自动添加它。

编辑:删除您的迁移文件夹中的最后一个迁移文件,然后重试。如果它不起作用,请重复相同的过程,当您的“ makemigrations”命令起作用时,您将知道已删除了正确的文件。

  • 我没有添加 id 字段。我想将此模型迁移到数据库中,但它显示了那些我不知道如何处理的消息。 (2认同)