【问题标题】:django admin gives warning "Field 'X' doesn't have a default value"django 管理员给出警告“字段'X'没有默认值”
【发布时间】:2011-06-02 10:42:31
【问题描述】:

我从现有的遗留数据库中创建了两个模型,一个用于文章,一个用于可以与文章关联的标签:

class Article(models.Model):
    article_id = models.AutoField(primary_key=True)
    text = models.CharField(max_length=400)
    class Meta:
        db_table = u'articles'
class Tag(models.Model):
    tag_id = models.AutoField(primary_key=True)
    tag = models.CharField(max_length=20)
    article=models.ForeignKey(Article)
    class Meta:
        db_table = u'article_tags'

我想从管理界面为文章添加标签,所以我的admin.py 文件如下所示:

from models import Article,Tag
from django.contrib import admin
class TagInline(admin.StackedInline):
    model = Tag


class ArticleAdmin(admin.ModelAdmin):

    inlines = [TagInline]

admin.site.register(Article,ArticleAdmin)

界面看起来不错,但是当我尝试保存时,我得到: Warning at /admin/webserver/article/382/ Field 'tag_id' doesn't have a default value

【问题讨论】:

  • 你为什么在model_id字段中使用AutoFields,它们是由django自动创建并设置为主键的。
  • @dcrodjer - 我使用的是旧版数据库
  • 您是否进行了任何模型/数据库表更改(在同步数据库之后)并且没有同步它们?看here
  • @dcrodjer - 这是否意味着这是一个 django 错误?看起来很奇怪
  • 为什么你说 django bug!!我在问你是否重置表和同步数据库

标签: django django-admin autofield


【解决方案1】:

如果您的数据库中有一个不允许 NULL 的废弃字段,也会发生这种情况。

【讨论】:

    【解决方案2】:

    问题是在 DB 中,tag_id 没有设置为自动增量字段。

    【讨论】:

      【解决方案3】:

      在我的案例中解决这个问题的方法是禁用默认启用的STRICT_TRANS_TABLES SQL 模式。

      【讨论】:

      • 是的,我也禁用了这个 # 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
      猜你喜欢
      • 1970-01-01
      • 2022-07-27
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多