改变了 Django 模型。我为 DateField 提供了一次性默认值 = datetime.date。发现无效。去掉了字段还是不能迁移
Altered Django model. I provided a one-off default = datetime.date for DateField. Found that it's invalid. Removed the field and still can't migrate
您好,这是我在 models.py
中添加的特定行
billingMonth2 = models.DateTimeField()
这就是 makemigrations 中发生的事情,我想我添加了一个不可为 null 的字段,所以我尝试定义一个默认值:
You are trying to add a non-nullable field 'billingMonth' to bills
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()
>>> datetime.date
Migrations for 'bills':
0007_auto_20160609_1400.py:
- Change Meta options on bills
- Add field billingMonth to bills
我发现datetime.date无效,结果出错
....File "/home/jrbenriquez/Envs/env1/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 197, in effective_default
default = field.get_default()
File "/home/jrbenriquez/Envs/env1/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 797, in get_default
return self.default()
TypeError: Required argument 'year' (pos 1) not found
所以我刚刚删除了 billingMonth2 字段,希望它会恢复正常,并将默认值设置为
`billingMonth2 = models.DateTimeField(default='Test',null=True,blank=True)`
两者仍然给出相同的错误。
在我看来,我已经在其他文件或数据库中更改了模型元数据中的某些内容,并且我必须在某处删除默认值 "datetime.date"
我希望有人能在这里帮助我。谢谢!
更新:
这里是 0007_auto20160609_1400.py
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-09 14:00
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.datetime_safe
class Migration(migrations.Migration):
dependencies = [
('bills', '0006_bills_duedate'),
]
operations = [
migrations.AlterModelOptions(
name='bills',
options={'ordering': ('-id', '-status'), 'verbose_name_plural': 'Bills'},
),
migrations.AddField(
model_name='bills',
name='billingMonth',
field=models.DateField(default=django.utils.datetime_safe.date),
preserve_default=False,
),
]
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()
>>> datetime.date
我猜它是在询问方法的 return 值,而不是方法本身。所以它的 datetime.date()
最后是 ()
。
此外,在您模型的字段声明中,您可以将当前日期设置为默认日期,如果您尝试这样做的话
billingMonth2 = models.DateTimeField(default=datetime.date, null=True, blank=True)
在那里你给了它方法本身,没有 ()
,所以时间是在创建新行时花费的,而不仅仅是在第一次定义模型时。
在 Makemigrations 期间使用:datetime.date.today() 用于填充数据库,否则您将获得 "TypeError: function missing required argument 'year' (pos 1)".
检查这张图片:
尝试以下操作。注意:您将丢失数据库中的所有数据!
- 删除您应用中的所有迁移(例如:001_initial.py)
- 删除数据库(我是db.sqlite3,是django提供的)
(如果有外部数据库,删除数据库并创建新的)
- 最后 运行 : python manage.py makemigrations
- Python manage.py 迁移
之后就可以运行正常了。
希望对您有所帮助。
现在请输入默认值,有效Python
datetime 和 django.utils.timezone 模块可用,所以你可以做,例如timezone.now()
datetime.date
or
timezone.now()
或
timezone.now
您好,这是我在 models.py
中添加的特定行billingMonth2 = models.DateTimeField()
这就是 makemigrations 中发生的事情,我想我添加了一个不可为 null 的字段,所以我尝试定义一个默认值:
You are trying to add a non-nullable field 'billingMonth' to bills
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()
>>> datetime.date
Migrations for 'bills':
0007_auto_20160609_1400.py:
- Change Meta options on bills
- Add field billingMonth to bills
我发现datetime.date无效,结果出错
....File "/home/jrbenriquez/Envs/env1/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 197, in effective_default
default = field.get_default()
File "/home/jrbenriquez/Envs/env1/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 797, in get_default
return self.default()
TypeError: Required argument 'year' (pos 1) not found
所以我刚刚删除了 billingMonth2 字段,希望它会恢复正常,并将默认值设置为
`billingMonth2 = models.DateTimeField(default='Test',null=True,blank=True)`
两者仍然给出相同的错误。 在我看来,我已经在其他文件或数据库中更改了模型元数据中的某些内容,并且我必须在某处删除默认值 "datetime.date"
我希望有人能在这里帮助我。谢谢!
更新: 这里是 0007_auto20160609_1400.py
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-09 14:00
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.datetime_safe
class Migration(migrations.Migration):
dependencies = [
('bills', '0006_bills_duedate'),
]
operations = [
migrations.AlterModelOptions(
name='bills',
options={'ordering': ('-id', '-status'), 'verbose_name_plural': 'Bills'},
),
migrations.AddField(
model_name='bills',
name='billingMonth',
field=models.DateField(default=django.utils.datetime_safe.date),
preserve_default=False,
),
]
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()
>>> datetime.date
我猜它是在询问方法的 return 值,而不是方法本身。所以它的 datetime.date()
最后是 ()
。
此外,在您模型的字段声明中,您可以将当前日期设置为默认日期,如果您尝试这样做的话
billingMonth2 = models.DateTimeField(default=datetime.date, null=True, blank=True)
在那里你给了它方法本身,没有 ()
,所以时间是在创建新行时花费的,而不仅仅是在第一次定义模型时。
在 Makemigrations 期间使用:datetime.date.today() 用于填充数据库,否则您将获得 "TypeError: function missing required argument 'year' (pos 1)".
检查这张图片:
尝试以下操作。注意:您将丢失数据库中的所有数据!
- 删除您应用中的所有迁移(例如:001_initial.py)
- 删除数据库(我是db.sqlite3,是django提供的) (如果有外部数据库,删除数据库并创建新的)
- 最后 运行 : python manage.py makemigrations
- Python manage.py 迁移
之后就可以运行正常了。
希望对您有所帮助。
现在请输入默认值,有效Python datetime 和 django.utils.timezone 模块可用,所以你可以做,例如timezone.now()
datetime.date or timezone.now()
或 timezone.now