Я реализовал некоторые модели и миграции в базу данных postgreSQL9.4. У меня есть несколько моделей. Для примера SkillLevelRuleModel:Ошибка целостности объекта Django 1.8 - поле модели нарушено не-нулевым ограничением
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).
Мой файл .json и соответствующую запись для этой модели выглядит следующим образом:
{
"model": "rewardsystem.SkillLevelRule",
"pk": 6,
"fields":{
"skillCategoryID" : "1",
"skillLevelID" : "1",
"threshold" : "2"
}
},
Я не понимаю, почему это происходит и как Я должен это предотвратить. Я не хочу, чтобы поле validTo было задано в начале. Зачем? Эта модель сохраняет правила или, допустим, пороговые значения. Они действительны с самого начала, когда модель создается. Возможно, в какой-то момент, когда система работает, администратор любит менять некоторые правила. Поэтому он должен уметь указывать до тех пор, пока определенное правило не будет VALID (validTO).
Это не решает мою проблему. Даже если у меня есть поле (auto_now = True), ошибка целостности все еще появляется ... Может быть, что-то не так с моим прибором? Я имею в виду, что я создаю модель, а затем хочу загрузить ее с исходными данными. Но в этой initial_data дата 'validTo' не требуется. Как мне это сделать? – Dante
Существует запись без поля validTo, которая не должна быть нулевой, но она есть. Возможно, неправильное определение вызвало это. –
Извините, но решение, которое вы предоставили, показалось мне излишним. Поэтому я попробовал что-то другое, что сработало для меня в конце. Я просто определил DateTimeField следующим образом: 'validTo = models.DateTimeField (blank = True, null = True)' Как я могу вручную установить поле validTo всякий раз, когда захочу. – Dante