Hi here's the specific line that I added in models.py
billingMonth2 = models.DateTimeField()
This is what happened in makemigrations, I figured I added a non nullable field so I tried to define a default value:
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
I found out that datetime.date was invalid and came out with an error
....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
So I just removed the billingMonth2 field hoping it would go back to normal and also setting a default value as
`billingMonth2 = models.DateTimeField(default='Test',null=True,blank=True)`
Both still gives the same error. It seems to me I have changed something within the meta of the model in some other file or in the database and that I have to delete the default value "datetime.date" somewhere
I hope someone could help me here. Thanks!
UPDATE: Here's 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
I guess it is asking for the return value of the method, not the method itself. So its datetime.date()
with the ()
at the end.
Also, in your model's field declaration, you can set the current date as a default, if that's what you tried to do
billingMonth2 = models.DateTimeField(default=datetime.date, null=True, blank=True)
There you give it the method itself, without the ()
, so that the time is taken when a new row is created, not only when the model is first defined.