2016-03-13 73 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