1
嗨我檢查所有關於我的答案的問題,並沒有找到解決方案。今天我改變我的CustomUser模型,然後停止工作。我想,我失敗了一件事,當Django問我關於datefield的默認值,並添加「」(空字符串),但我不確定。
我試圖刪除所有的數據庫表,並再次遷移,試圖刪除所有遷移,仍然沒有工作
我的模型:Django ValidationError日期格式異常
class UserManager(BaseUserManager):
def create_user(self, username, email, password=None):
if not email:
raise ValueError('You must set email ')
if not username:
raise ValueError('User must have username')
user = self.model(username=username,
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, email, password):
user = self.create_user(username=username, email=email, password=password)
user.is_admin = True
user.is_superuser = True
user.save(using=self._db)
return user
class CustomUser(AbstractBaseUser, PermissionsMixin):
alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', message='Only alphanumeric characters are allowed.')
username = models.CharField(unique=True, max_length=30, validators= [alphanumeric])
email = models.EmailField(
'Email',
max_length=255,
unique=True,
db_index=True
)
avatar = models.ImageField(
'Avatar',
blank=True,
upload_to='user/avatar',
default='user/default.jpg'
)
firstname = models.CharField(
'First name',
max_length=40,
blank=True,
)
lastname = models.CharField(
'Last name',
max_length=40,
blank=True,
)
date_of_birth = models.DateField(
'Date of birth',
null=True,
blank=True,
)
register_date = models.DateField(
'Register date',
auto_now_add=True,
null=True,
blank=True,
)
is_active = models.BooleanField(
'Active',
default=True
)
is_admin = models.BooleanField(
'Superuser',
default=False
)
def age(self):
x = date.today()
if self.date_of_birth.year is None:
return ''
else:
return x.year - self.date_of_birth.year
@property
def is_staff(self):
return self.is_admin
def get_short_name(self):
return self.email
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = UserManager()
class Meta:
verbose_name = 'User'
verbose_name_plural = 'Users'
我的服務器日誌:
運行的遷移:
Rendering model states... DONE
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
Applying users.0008_auto_20151104_1042...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/core/management/base.py", line 393, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/core/management/base.py", line 444, in execute
output = self.handle(*args, **options)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 222, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/migrations/executor.py", line 110, in migrate
self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/migrations/executor.py", line 148, in apply_migration
state = migration.apply(state, schema_editor)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/migrations/migration.py", line 115, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/migrations/operations/fields.py", line 201, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 484, in alter_field
old_db_params, new_db_params, strict)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 567, in _alter_field
new_default = self.effective_default(new_field)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 211, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 710, in get_db_prep_save
prepared=False)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 1322, in get_db_prep_value
value = self.get_prep_value(value)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 1317, in get_prep_value
return self.to_python(value)
File "/home/ivan/diabetes_django/venv/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 1287, in to_python
params={'value': value},
django.core.exceptions.ValidationError: ["'' value has an invalid date format. It must be in YYYY-MM-DD format."]
這是我的第一個研究項目,所以不要擔心。我不明白我的模型中需要更改默認日期格式。我刪除所有表格,然後再次開始遷移,爲什麼我仍然有異常。 –
確保您在重新啓動數據庫時也刪除遷移文件。 – Alasdair
它的工作原理。我再次刪除所有遷移和db中的所有表。然後makemg每個單一的應用程序。謝謝你的回答 –