Python Django 1.8夹具完整性错误-非空约束违反模型字段

Python Django 1.8夹具完整性错误-非空约束违反模型字段,python,json,django,error-handling,django-fixtures,Python,Json,Django,Error Handling,Django Fixtures,我已经在postgreSQL9.4数据库中实现了一些模型和迁移。我有一些模型。例如,SkillLevelRuleModel: class SkillLevelRule(models.Model): skillLevelRuleID = models.AutoField(primary_key=True) skillCategoryID = models.ForeignKey(SkillCategory, default=1) skillLevelID = models.ForeignKey(Sk

我已经在postgreSQL9.4数据库中实现了一些模型和迁移。我有一些模型。例如,SkillLevelRuleModel:

class SkillLevelRule(models.Model):
skillLevelRuleID = models.AutoField(primary_key=True)
skillCategoryID = models.ForeignKey(SkillCategory, default=1)
skillLevelID = models.ForeignKey(SkillLevel, default=1)
threshold = models.IntegerField()
validFrom = models.DateTimeField(default=datetime.now)
validTo = models.DateTimeField(auto_now_add=False, auto_now=True)
现在,我对以下字段有问题:

validTo = models.DateTimeField(auto_now_add=False, auto_now=True)
因此,当创建模型时,它在开始时应该没有任何值,但是一旦模型中的条目被更新,validTO就应该被更新

一旦创建了模型(makemigrations,migrate),我就想加载一个initial_data.json来加载初始数据

遗憾的是,我得到了以下错误:

Could not load rewardsystem.SkillLevelRule(pk=6): null value in column "validTo" violates not-null constraint
DETAIL:  Failing row contains (6, 2, 2016-02-11 08:46:29.267201+00, null, 1, 1).
My.json文件和此模型的相应条目如下所示:

{
    "model": "rewardsystem.SkillLevelRule",
    "pk": 6,
    "fields":{
        "skillCategoryID" : "1",
        "skillLevelID" : "1",
        "threshold" : "2"
    }
},
我不明白为什么会发生这种情况,我应该如何防止它。我不希望在开头设置validTo字段。为什么?这个模型保存规则或者说阈值。当模型被实例化时,它们从一开始就有效。也许在系统运行的某个时刻,管理员喜欢更改一些规则。因此,他应该能够指定某个规则何时有效(validTO)

auto_now_add与auto_now类似,但在创建记录时只添加一次“now”。如果您使用auto_now,它将为初始添加保存,就像auto_now_add功能一样,然后在每次记录更新时继续更新到“now”

这个字段中似乎有一个null,它不应该是null,可能是因为这个错误的定义

  • 修理场地
  • 加载数据
  • 循环遍历所有对象,然后保存()。这将向缺少的行添加now datetime
  • 现在可以删除blank=True、null=True、makemigrations和migrate
  • 要循环并保存(步骤3),请创建以下python脚本并从shell运行它:

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") #copy from manage.py
    os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
    import django
    django.setup()
    from mysite.myapp.models import SkillLevelRule
    q = SkillLevelRule.objects.all()
    for s in q:
       q.save()
    

    这并不能解决我的问题。即使我有字段(auto_now=True),完整性错误仍然会弹出…可能是我的夹具出了问题?我的意思是我创建模型,然后我想用初始数据加载它。但在此初始数据中,不应要求“有效日期”。我应该怎么做?有一个记录没有validTo字段,它不应该为空,但它是空的。可能是错误的定义造成的。很抱歉,你提供的解决方案对我来说似乎太过分了。所以我尝试了一些不同的方法,最终对我有效。我刚刚定义了DateTimeField,如下所示:
    validTo=models.DateTimeField(blank=True,null=True)
    像这样,我可以随时手动设置validTo字段。没问题,我现在尝试用auto_回答,这就是问题的原因。当然,使用null和blank就没有问题了。很抱歉给您带来不便。我不想粗鲁,但我的Django知识并没有那么先进,所以我不完全理解您的解决方案,所以我无法尝试这个。。。。
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") #copy from manage.py
    os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
    import django
    django.setup()
    from mysite.myapp.models import SkillLevelRule
    q = SkillLevelRule.objects.all()
    for s in q:
       q.save()