2016-03-13 70 views
1

我认为这是一个基本的错误,但我试图做一些测试,但现在不能迁移内容。我做了python manage.py makemigrations正常,但使用时,“迁移”看来,消息错误:Django错误迁移时(int()和datetime.datetime)

C:\P3\P3\urls.py:21: RemovedInDjango110Warning: Support for string view arguments to url() is deprecated and will be removed in Django 1.10 (got quizzy.views.primeraprox). Pass the callable instead. 
    url(r'^primaprox/', 'quizzy.views.primeraprox'), 

Operations to perform: 
    Apply all migrations: contenttypes, admin, sessions, quizzy, auth 
Running migrations: 
    Rendering model states... DONE 
    Applying quizzy.0002_auto_20160313_1718...Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\__init__.py", line 345, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\base.py", line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\base.py", line 399, in execute 
    output = self.handle(*args, **options) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\commands\migrate.py", line 200, in handle 
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\executor.py", line 92, in migrate 
    self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\executor.py", line 121, in _migrate_all_forwards 
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\executor.py", line 198, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\migration.py", line 123, in apply 
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\operations\fields.py", line 62, in database_forwards 
    field, 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\backends\base\schema.py", line 382, in add_field 
    definition, params = self.column_sql(model, field, include_default=True) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\backends\base\schema.py", line 145, in column_sql 
    default_value = self.effective_default(field) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\backends\base\schema.py", line 210, in effective_default 
    default = field.get_db_prep_save(default, self.connection) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\models\fields\related.py", line 912, in get_db_prep_save 
    return self.target_field.get_db_prep_save(value, connection=connection) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\models\fields\__init__.py", line 728, in get_db_prep_save 
    prepared=False) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\models\fields\__init__.py", line 968, in get_db_prep_value 
    value = self.get_prep_value(value) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\models\fields\__init__.py", line 976, in get_prep_value 
    return int(value) 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'datetime.datetime' 

此外,有什么用URL的问题?

我的models.py这个样子的:

from django.db import models 
from django.utils import timezone 

class Questions(models.Model): 
    content = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('datetime field', default=True) 

    def __str__(self): 
     return self.content 

class Answer(models.Model): 
    answer_text = models.CharField(max_length=200) 
    first_field = models.CharField(max_length=150) 
    question = models.ManyToManyField(Questions) 

    def __str__(self): 
     return self.answer_text 

我只是希望能够使迁移,而不能找出为什么Django是给这个错误关于“datetime.datetime”。我真的很感激任何帮助。谢谢。

编辑1:我改变了pub_date字段。然后'makemigrations'返回:

C:\P3>python manage.py makemigrations 
C:\P3\P3\urls.py:21: RemovedInDjango110Warning: Support for string view arguments to url() is deprecated and will be removed in Django 1.10 (got quizzy.views.primeraprox). Pass the callable instead. 
    url(r'^primaprox/', 'quizzy.views.primeraprox'), 

System check identified some issues: 

WARNINGS: 
quizzy.Questions.pub_date: (fields.W161) Fixed default value provided. 
     HINT: It seems you set a fixed date/time/datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use `django.utils.timezone.now` 
Migrations for 'quizzy': 
    0012_auto_20160313_1810.py: 
    - Alter field pub_date on questions 

然后当我再次运行'迁移'时,错误信息是一样的。发生什么事?谢谢

编辑2:如果您所请求的“使移民”的上面的文字,这是一个:

C:\P3>python manage.py makemigrations 
C:\P3\P3\urls.py:21: RemovedInDjango110Warning: Support for string view arguments to url() is deprecated and will be removed in Django 1.10 (got quizzy.views.primeraprox). Pass the callable instead. 
    url(r'', 'quizzy.views.primeraprox'), 

You are trying to add a non-nullable field 'quiz' to questions without a default; we can't do that (the database needs something to populate existing rows). 
Please select a fix: 
1) Provide a one-off default now (will be set on all existing rows) 
2) Quit, and let me add a default in models.py 
Select an option: 1 
Please enter the default value now, as valid Python 
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now() 
>>> timezone.now() 
Migrations for 'quizzy': 
    0002_auto_20160313_1718.py: 
    - Create model Quiz 
    - Add field quiz to questions 

这是属于我做了一些改变,但现在我已经删除了,也许可能会有错误。

EDIT 3:用PUB_DATE设为(auto_now =真)时,完整的迁移是这样的:

C:\P3>python manage.py migrate 
C:\P3\P3\urls.py:21: RemovedInDjango110Warning: Support for string view arguments to url() is deprecated and will be removed in Django 1.10 (got quizzy.views.primeraprox). Pass the callable instead. 
    url(r'^primaprox/', 'quizzy.views.primeraprox'), 

Operations to perform: 
    Apply all migrations: quizzy, contenttypes, sessions, auth, admin 
Running migrations: 
    Rendering model states... DONE 
    Applying quizzy.0002_auto_20160313_1718...Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\__init__.py", line 345, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\base.py", line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\base.py", line 399, in execute 
    output = self.handle(*args, **options) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\core\management\commands\migrate.py", line 200, in handle 
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\executor.py", line 92, in migrate 
    self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\executor.py", line 121, in _migrate_all_forwards 
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\executor.py", line 198, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\migration.py", line 123, in apply 
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\migrations\operations\fields.py", line 62, in database_forwards 
    field, 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\backends\base\schema.py", line 382, in add_field 
    definition, params = self.column_sql(model, field, include_default=True) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\backends\base\schema.py", line 145, in column_sql 
    default_value = self.effective_default(field) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\backends\base\schema.py", line 210, in effective_default 
    default = field.get_db_prep_save(default, self.connection) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\models\fields\related.py", line 912, in get_db_prep_save 
    return self.target_field.get_db_prep_save(value, connection=connection) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\models\fields\__init__.py", line 728, in get_db_prep_save 
    prepared=False) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\models\fields\__init__.py", line 968, in get_db_prep_value 
    value = self.get_prep_value(value) 
    File "C:\Python\lib\site-packages\django-1.9.1-py3.5.egg\django\db\models\fields\__init__.py", line 976, in get_prep_value 
    return int(value) 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'datetime.datetime' 

EDIT 4(迁移):迁移文件包含:

class Migration(migrations.Migration): 

    dependencies = [ 
     ('quizzy', '0001_initial'), 
    ] 

    operations = [ 
     migrations.CreateModel(
      name='Quiz', 
      fields=[ 
       ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 
       ('name', models.TextField(default='true', max_length=200)), 
      ], 
     ), 
     migrations.AddField(
      model_name='questions', 
      name='quiz', 
      field=models.ForeignKey(default=datetime.datetime(2016, 3, 13, 16, 18, 27, 23857, tzinfo=utc), on_delete=django.db.models.deletion.CASCADE, to='quizzy.Quiz'), 
      preserve_default=False, 
     ), 
    ] 
+0

灿你包含'quizzy.0002_auto_20160313_1718'迁移? – Sayse

+0

我已经添加了它,如果我已经很好地理解你的宠爱。谢谢你回答 – Jim

+0

根据你的回溯,我的意思是字面意义上的迁移文件的内容,问题就在于此。 – Sayse

回答

0

你的pubdate有一个布尔值的默认值,你应该给它一个日期时间或自动调整

pub_date = models.DateTimeField(auto_now=True) 
pub_date = models.DateTimeField(default=timezone.now) 

你面对的是你要设置的外键日期时间的默认的实际问题,你可以设置一定的ID或允许空值

migrations.AddField(
     model_name='questions', 
     name='quiz', 
     field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='quizzy.Quiz'), # or null=True 
     preserve_default=False, 
    ), 
+0

感谢您的回答。问题依然存在。我编辑了第一篇文章。谢谢 – Jim

+0

@Jim - 你把默认设置改成了什么? (想想如果你使用底部片段,它不应该包括括号),无论哪种方式是一个*警告*不是一个错误 – Sayse

+0

我尝试了两个,但现在我把'默认=时区。现在'(也试过timezone.now())。迁移过程中的错误仍然发生,但无法找出原因。再次感谢你。 – Jim