"django.core.exceptions.ValidationError" 错误

"django.core.exceptions.ValidationError" error

我正在用Django写一个简单的游戏,一切都是正确的,但是突然...,我遇到了以下错误:

我不知道这些代码有什么问题:

    (test)alireza@alireza:~/test/test1$ python manage.py syncdb
    Operations to perform:
      Synchronize unmigrated apps: django_admin_bootstrapped, django_admin_bootstrapped_bootstrap3, crispy_forms
      Apply all migrations: contenttypes, admin, auth, arosis, sessions
    Synchronizing apps without migrations:
      Creating tables...
      Installing custom SQL...
      Installing indexes...
    Running migrations:
      Applying arosis.0008_auto_20150212_0826...Traceback (most recent call last):
      File "manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "/home/alireza/test/lib/python3.4/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
        utility.execute()
      File "/home/alireza/test/lib/python3.4/site-
...
...
...

        return self.to_python(value)
      File "/home/alireza/test/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 1252, in to_python
        params={'value': value},
    django.core.exceptions.ValidationError: ["'' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]

在我的 models.py:

class Move(models.Model):
    """docstring for Move"""
    x = models.IntegerField()
    y = models.IntegerField()
    comment = models.CharField(max_length=30)
    game = models.ForeignKey(Game)
    by_first_player = models.BooleanField(default=True)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "{}".format(self.comment)

    class Meta:
        get_latest_by = 'timestamp'

    def player(self):
        return self.game.first_player if self.by_first_player else self.game.second_player

我给了 auto_now_add=True

但起初,当我 运行 :

python manage.py makemigrations

它要求我输入 DateTimeField()

的默认值

我该怎么办?

0008_auto_20150212_0826.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

    dependencies = [
        ('arosis', '0007_auto_20150211_1844'),
    ]

    operations = [
        migrations.AlterModelOptions(
            name='move',
            options={'get_latest_by': 'timestamp'},
        ),
        migrations.AddField(
            model_name='move',
            name='by_first_player',
            field=models.BooleanField(default=True),
            preserve_default=True,
        ),
        migrations.AddField(
            model_name='move',
            name='timestamp',
            field=models.DateTimeField(default='', auto_now_add=True),
            preserve_default=True,
        ),
    ]

据我了解,您已经有一个数据库,其中已经有一些 "Move" 个条目。

如果您在 table 中添加一个已经有数据的列,您需要为该列提供一个默认值,迁移将设置为数据库中的所有现有条目所涉及的table(否则此类条目将无效,除非 null=True 被指定为 kwarg,如果我没记错的话)

此外,您可能需要在 settings.py 中设置 DATE_INPUT_FORMATS 和 DATETIME_INPUT_FORMATS 变量,因此您的语言环境和您输入日期的方式。 (参见 https://docs.djangoproject.com/en/1.7/ref/settings/#date-input-formats

一个例子(在意大利,我们有 DD/MM/YYYY 格式):

DATE_INPUT_FORMATS = ( "%d/%m/%Y", )
DATETIME_INPUT_FORMATS = ( "%d/%m/%Y %H:%M", )

您的 django 配置需要以下格式:

 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

(方括号内的内容可选)

编辑:auto_now_add kw arg 告诉在添加(而不是更新..)条目时应将字段值设置为 "now"

It asked me for entering a default value for DateTimeField()

这样做是因为您没有指定默认值,并且该字段不是可选的。由于它是一个破坏性的变化,你必须提供一个默认值。

您可能只是按了回车键,因此出现了异常,因为空白字符串不是 DateTimeField 的有效条目。

解决方案是运行再次迁移,这次提供有效的日期和时间字符串;它将用于数据库中的所有现有行;有效格式的示例是 2015-02-12 00:00

我也有类似的事情。从文件夹 /migrations 中删除所有迁移,然后 运行 python manage.py makemigrations 然后 python manage.py migrate。这对我有用。

此外,如果您不怕弄脏自己的手,那么查看该文件夹中的迁移文件并找到特定的无效字段对我来说是对的。 删除所有迁移为我带来了一些错误。