【问题标题】:Multiple default values specified for column "uid" of table in Django 1.8为 Django 1.8 中表的“uid”列指定了多个默认值
【发布时间】:2015-11-28 08:56:56
【问题描述】:

我正在创建一个Django Application,而我的models.py 是:

class Registration(models.Model):
    uid = models.AutoField(primary_key=True, default=0)
    uname = models.CharField(max_length=100, blank=False, null=False)
    upassword = models.CharField(max_length=100, blank=False, null=False)
    uphone = models.IntegerField(blank=True, null=True)
    uhid = models.ForeignKey('Hood', blank=False, null=False, default='ABC')
    uemail = models.EmailField(blank=False, null=False, default='abc402@nyu.edu')
    uintro = models.TextField(null=True, blank=True)
    uphoto = models.ImageField(upload_to='', blank=False, null=False, default='static/img/natural_join_is_inner_join.png')
    uhood = models.CharField(max_length=10, null=True)
    uaddress = models.CharField(max_length=100, default='ABC')
    # django automatically uses the media root which you have declared in your settings, define that to `upload_to`

    def __unicode__(self):
        return self.uname

然后我运行以下命令:

python manage.py makemigrations

python manage.py migrate

但它显示了一个错误:

为表的“uid”列指定了多个默认值 "registration_registration"

谁能帮我解决这个问题?堆栈溢出的其他链接没有太大帮助!

当我删除 id uid 字段时,Django 正在向我展示:

You are trying to add a non-nullable field 'id' to registration 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

问题是为什么我应该为 django 自动创建的id 提供默认值?

更新:我已删除迁移文件夹,所以我解决了上述问题,但现在出现错误:

“创建新内容类型时出错。请确保内容类型” RuntimeError:创建新内容类型时出错。请确保 在尝试单独迁移应用程序之前先迁移 contenttypes。

【问题讨论】:

  • 显然你的迁移搞砸了。尝试再次删除迁移文件夹并在 makemigrations 之前运行一次迁移。
  • 我现在没有迁移文件夹。我打算删除数据库并创建一个新数据库?你认为这是个好主意吗!
  • 嗯,这真的取决于其中的数据......如果它只是一个没有任何内容的新开发数据库,​​我会删除它。如果不知道许多其他细节,很难说出究竟发生了什么。

标签: python django django-models django-admin


【解决方案1】:

您首先不应该为uid 定义default 值。它是一个 AutoField,它从数据库中获取一个自动递增的值。

【讨论】:

  • 如果你看到最后几行,我的错误现在不同了。
猜你喜欢
  • 2015-09-07
  • 2014-06-25
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2015-06-15
  • 2015-07-12
  • 2014-11-12
相关资源
最近更新 更多