Django мигрировать значение недопустимый литерал - PullRequest
0 голосов
/ 12 октября 2019

У меня проблема с функцией миграции Django. Я пытался добавить новое поле в мою модель пользователя, и это выглядит так.

class UserProfile(models.Model):
    """ Model to represent additional information about user """
    user = models.OneToOneField(
        User,
        on_delete=models.CASCADE,
        related_name='profile'
    )
    bio = models.TextField(
        max_length=2000,
        blank=True,
        default=''
    )
    # we use URL instead of imagefield because we'll use 3rd party img hosting later on
    avatar = models.URLField(default='', blank=True)
    status = models.CharField(max_length=16, default='', blank=True)
    name = models.CharField(max_length=32, default='')
    balance = models.BigIntegerField(default='0')

    def __str__(self):
        return self.user.username

баланс - это новое, что я добавил, и после этого я получаю сообщения типа

* 1006. * Операции, которые необходимо выполнить: применить все миграции: учетные записи, администратор, авторизацию, authtoken, типы контента, форумы, сообщения, сеансы, потоки. Выполнение миграций: применение account.0005_userprofile_balance ... Traceback (последний вызов был последним): файл "manage.py"строка 15, в файле execute_from_command_line (sys.argv) "C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ core \ management__init __. py", строка 371, в файле execute_from_command_lineУтилита util.execute () Файл "C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ core \ management__init __. py", строка 365, в команде execute self.fetch_command (подкоманда).run_from_argv (self.argv) Файл "C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ core \ management \ base.py", строка 288, в файле run_from_argv self. выполнить (* args, ** cmd_options) файл"C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ core \ management \ base.py", строка 335, в файле output output = self.handle (* args, *)* options) Файл "C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ core \ management \ commands \ migrate.py", строка 200, в дескрипторе fake_initial = fake_initial,Файл "C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ db \ migrations \ executor.py", строка 117, в состоянии миграции = self._migrate_all_forwards (состояние, план, full_plan, fake = fake, fake_initial = fake_initial) Файл "C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ db \ migrations \ executor.py", строка 147,в _migrate_all_forwards state = self.apply_migration (состояние, миграция, fake = fake, fake_initial = fake_initial) Файл "C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ db \ migrations\ executor.py ", строка 244, в состоянии apply_migration = состояние миграции.apply (состояние, схема_редактора) Файл" C: \ Users \ Rade \ Desktop \ reng "orum-master \ backend \ env \ lib \ site-packages \ django \ db \ migrations \igration.py ", строка 122, в файле apply operation.database_forwards (self.app_label, schema_editor, old_state, project_state) Файл" C: \ Users "\ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ db \ migrations \ operations \ fields.py ", строка 84, в поле database_forwards, файл" C: \ Users \ Rade \ Desktop \ "rengorum-master \ backend \ env \ lib \ site-packages \ django \ db \ backends \ sqlite3 \ schema.py ", строка 315, в add_field self._remake_table (model, create_field = field) Файл" C: \ Users \ Rade\ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ db \ backends \ sqlite3 \ schema.py ", строка 187, в файле _remake_table self.effective_default (create_field)" C: \ Users \ Rade \ "Рабочий стол \ rengorum-master \ backend \ env \ lib \ site-packages \ django \ db \ backends \ base \ schema.py ", строка 240, в эффективном_действии по умолчанию = field.get_db_prep_save (по умолчанию, self.connection) Файл" C:\ Users \ Роде \ Desktop \ rengorum-мастер \ бэкенд \ окр \ Lib \ сайт-пакеты \ Джанго \ DB \ MODELS \ fields__init__.py ", строка 767, в get_db_prep_save вернуть self.get_db_prep_value (значение, соединение = соединение, подготовлено = False) Файл" C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ "django \ db \ models \ fields__init __. py ", строка 762, в значении get_db_prep_value = self.get_prep_value (значение) Файл" C: \ Users \ Rade \ Desktop \ rengorum-master \ backend \ env \ lib \ site-packages \ django "\ db \ models \ fields__init __. py ", строка 1826, в get_prep_value возвращает int (значение) ValueError: недопустимый литерал для int () с основанием 10: ''

после того, как я получил это сообщение, япопытался установить значение по умолчанию 0,00, но это все то же сообщение, я удалил поле баланса и все еще получаю то же сообщение. Есть идеи?

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Это в основном проблема миграции, поскольку файлы миграции генерируются на основе ваших исходных кодов, и при миграции эти файлы миграции выполняются и выдают ошибки.

Я думаю, что вы можете использовать любой изследующее решение, чтобы исправить это:

Solution One

Сначала вы должны удалить файл миграции (т. е. 0003_auto_<some id>.py) из каталога <app>/migrations, который был создан при запуске python manage.py makemigrations. Если вы не уверены, какой из них удалить, проверьте таблицу django_migrations в вашей базе данных и посмотрите, к каким миграциям она была применена. После удаления последнего файла миграции (или файлов) необходимо изменить значение по умолчанию на 0. Затем вы должны запустить makemigrations и перенести команды.

Решение второе

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

    operations = [
        migrations.AddField(
            model_name='userprofile',
            name='balance',
            field=models.BigIntegerField(default=0),  # instead of default='0'
        ),

Также вы должны удалить дополнительные файлы миграции (если они были созданы), когда вы установили значение по умолчанию иповторно запустил команды миграции.

0 голосов
/ 12 октября 2019

Значение по умолчанию BigIntegerField должно быть целым числом, а не в кавычках:

balance = models.BigIntegerField(default=0)

или, если вам нужно десятичное число:

balance = models.DecimalField(max_digits=6, decimal_places=2, default=0)

или использовать MoneyField https://github.com/django-money/django-money

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...