【问题标题】:Why is AutoField not working?为什么 AutoField 不起作用?
【发布时间】:2013-04-18 00:24:49
【问题描述】:

我在我的模型中创建了这个字段:

numero_str = models.AutoField(primary_key=True, unique=True, default = 0)

默认值似乎使 AutoField 的自动增量无效,但如果我将其取出,我会收到一条错误消息,指出该字段不能为空。我不明白的是:如果我将它声明为 AutoField,它不应该自动生成一个顺序整数吗?或者我应该在保存项目时声明一些东西?

更具体地说,我的应用程序基本上是一个通过电子邮件发送并保存在数据库中的表单。发送时发生错误(以防我取出默认值)。它说:

IntegrityError at /solicitacaodetreinamento/

str_solicitacao.numero_str may not be NULL

【问题讨论】:

  • 您在哪里收到关于不为空的错误?发布确切的消息。
  • 我的猜测是默认为0,或许你应该使用default=1或者添加null=True
  • @J.Ghyllebert default=1 给了我与 default=0 相同的错误,并且 null=True 返回“主键字段不能有 null=True”
  • 您的模态可能只有一个primary_key=True 字段。Read this 以获取更多信息。此外,它不能是现有模型的ALTER,因为如果在第一次模型-数据库同步期间模型中没有预定义的主键字段,django 会自动创建一个主键字段。否则违反Only one primary key is allowed on an object.规则。
  • @RodrigoGuedes,第一次同步模型时,django 在模型字段中搜索 primary_key 属性。如果找不到,则创建一个名为 id 的文件。如果有 ona,那么 django 就不要创建它。其次,django 会让你只有一个属性为primary_key 的字段。在每个模型中。这可以由您在模型中定义,也可以由 django 自动创建。 Read this and all realted topics。我不确定,但可能是因为这个。

标签: django django-models python-2.7


【解决方案1】:

我找到了解决方案:我删除了 DB 文件和 South 的所有迁移(包括 Initial)。然后我重新创建了数据库并进行了迁移。这一次,使用默认的主键,即“id”。就我而言,它更简单,因为我根本没有真实数据(它不在生产中),否则我将不得不导出数据,重新创建数据库,然后导入数据。谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2019-08-06
    • 2016-07-05
    • 2011-08-06
    • 2013-01-18
    相关资源
    最近更新 更多