2015-11-04 3 views
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."] 

ответ

1
django.core.exceptions.ValidationError: ["'' value has an invalid date format. It must be in YYYY-MM-DD format."] 

Как сказано в сообщении об ошибке, пустая строка является недопустимым значением для даты. Вы можете указать строку в требуемом формате, например. "2015-11-04", или использовать python's date, например. date.today().

Однако, я немного обеспокоен тем, что у вас есть это изменение в миграции 0008 в ваших миграциях. Переход к пользовательскому пользователю в существующем проекте чрезвычайно сложно (см. warning in the docs). Если вы удалите все пользовательские миграции и заново создадите их, тогда он должен создать модель с нуля и вообще не запрашивать дату по умолчанию.

+0

Это мой первый проект студия, так что не волнуйтесь. Я не понимаю, где в моей модели необходимо изменить формат даты по умолчанию. И я удаляю все таблицы, а затем снова запускаю миграцию, почему у меня все еще есть исключение. –

+0

Убедитесь, что вы удалили файлы миграции и при перезагрузке базы данных. – Alasdair

+1

Он работает. Я снова удаляю все миграции и всю таблицу в db. Затем makemgrations каждое приложение. Спасибо, что ответили –

Смежные вопросы