簡體   English   中英

首先遷移到新的PostgreSQL數據庫。 ValueError:以10為底的int()的無效文字:''

[英]First migration to a new PostgreSQL database. ValueError: invalid literal for int() with base 10: ''

擁有成功與SQLite數據庫配合使用的models.py。 現在嘗試使用PostgreSQL。 如果查看Traceback,似乎整數字段有一個字符串默認值。 我只是看不到。 評論了大多數領域,進行了移植,仍然是同樣的問題。

追溯

 Operations to perform:
  Apply all migrations: admin, auth, contenttypes, players, sessions, silk, users
Running migrations:
  Applying players.0007_auto_20190130_1427...Traceback (most recent call last):
  File "D:\temp\YandexDisk\programming\py\nhl_web_app\manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "c:\program files\python37\lib\site-packages\django\core\management\__init__.py",
 line 381, in execute_from_command_line
    utility.execute()
  File "c:\program files\python37\lib\site-packages\django\core\management\__init__.py",
 line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "c:\program files\python37\lib\site-packages\django\core\management\base.py", lin
e 316, in run_from_argv
    self.execute(*args, **cmd_options)
  File "c:\program files\python37\lib\site-packages\django\core\management\base.py", lin
e 353, in execute
    output = self.handle(*args, **options)
  File "c:\program files\python37\lib\site-packages\django\core\management\base.py", lin
e 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "c:\program files\python37\lib\site-packages\django\core\management\commands\migr
ate.py", line 203, in handle
    fake_initial=fake_initial,
  File "c:\program files\python37\lib\site-packages\django\db\migrations\executor.py", l
ine 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=f
ake_initial)
  File "c:\program files\python37\lib\site-packages\django\db\migrations\executor.py", l
ine 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)

  File "c:\program files\python37\lib\site-packages\django\db\migrations\executor.py", l
ine 244, in apply_migration
    state = migration.apply(state, schema_editor)
  File "c:\program files\python37\lib\site-packages\django\db\migrations\migration.py",
line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)

  File "c:\program files\python37\lib\site-packages\django\db\migrations\operations\fiel
ds.py", line 216, in database_forwards
    schema_editor.alter_field(from_model, from_field, to_field)
  File "c:\program files\python37\lib\site-packages\django\db\backends\base\schema.py",
line 523, in alter_field
    old_db_params, new_db_params, strict)
  File "c:\program files\python37\lib\site-packages\django\db\backends\postgresql\schema
.py", line 122, in _alter_field
    new_db_params, strict,
  File "c:\program files\python37\lib\site-packages\django\db\backends\base\schema.py",
line 627, in _alter_field
    new_default = self.effective_default(new_field)
  File "c:\program files\python37\lib\site-packages\django\db\backends\base\schema.py",
line 239, in effective_default
    return field.get_db_prep_save(default, self.connection)
  File "c:\program files\python37\lib\site-packages\django\db\models\fields\__init__.py"
, line 790, in get_db_prep_save
    return self.get_db_prep_value(value, connection=connection, prepared=False)
  File "c:\program files\python37\lib\site-packages\django\db\models\fields\__init__.py"
, line 785, in get_db_prep_value
    value = self.get_prep_value(value)
  File "c:\program files\python37\lib\site-packages\django\db\models\fields\__init__.py"
, line 1807, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: ''

model.py

from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify
from players.storage import OverwriteStorage


class Player(models.Model):
    name = models.CharField(max_length=128, default='nme')
    nhl_id = models.IntegerField(unique=True, default=25)
    slug = models.SlugField()
    # image = models.ImageField(upload_to='players_pics', storage=OverwriteStorage(), max_length=None)
    # team = models.CharField(max_length=128, default='')
    # position = models.CharField(max_length=128, default='')
    # height = models.CharField(max_length=128, default='')
    # weight = models.IntegerField(default=25)
    # birth_date = models.CharField(max_length=128, default='')
    # birth_city = models.CharField(max_length=128, default='')
    # birth_state = models.CharField(max_length=128, default='')
    # birth_country = models.CharField(max_length=128, default='')
    # nation = models.CharField(max_length=128, default='')
    # draft_year = models.CharField(max_length=128, default='')
    # draft_number = models.CharField(max_length=128, default='')
    # games = models.IntegerField(default=25)
    # pl_number = models.IntegerField(null=True, default=25)
    # age = models.IntegerField(null=True, default=25)
    # roster_status = models.CharField(max_length=128, default='')
    # captain = models.BooleanField(default=False)
    # alt_captain = models.BooleanField(default=False)

    def __str__(self):
        return f'{self.name}'

    def save(self, *args, **kwargs):
        is_new = self.pk is None
        if is_new:
            self.slug = slugify(self.name)
        super(Player, self).save(*args, **kwargs)

    class Meta:
        abstract = True


class Skater(Player):
    # favorite = models.ManyToManyField(User, related_name='favorite_s', blank=True)
    goals = models.IntegerField(default=10)
    # goals_avg = models.FloatField(default=10)
    # assists = models.IntegerField()
    # assists_avg = models.FloatField(default=10)
    # points = models.IntegerField()
    # points_avg = models.FloatField(default=10)
    # plus_minus = models.IntegerField()
    # plus_minus_avg = models.FloatField(default=10)
    # penalty_min = models.IntegerField()
    # penalty_min_avg = models.FloatField(default=10)
    # shots = models.IntegerField()
    # shots_avg = models.FloatField(default=10)
    # hits = models.IntegerField(null=True)
    # hits_avg = models.FloatField(default=10, null=True)
    # blocks = models.IntegerField(null=True)
    # blocks_avg = models.FloatField(default=10, null=True)
    # faceoff_wins = models.IntegerField(null=True)
    # faceoff_wins_avg = models.FloatField(default=10, null=True)
    # pp_points = models.IntegerField()
    # pp_points_avg = models.FloatField(default=10)
    # sh_points = models.IntegerField()
    # sh_points_avg = models.FloatField(default=10)
    # time_on_ice = models.CharField(max_length=128, default='')
    # time_on_ice_pp = models.CharField(max_length=128, default='')
    # time_on_ice_sh = models.CharField(max_length=128, default='')


class Goalie(Player):
    # favorite = models.ManyToManyField(User, related_name='favorite_g', blank=True)
    wins = models.IntegerField(default=10)
    # losses = models.IntegerField()
    # ot_losses = models.IntegerField()
    # goals_against_av = models.FloatField()
    # saves_perc = models.FloatField()
    # saves = models.IntegerField()
    # shotouts = models.IntegerField()

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'nhl_web_app_1',
        'USER': 'postgres',
        'PASSWORD': '***',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

在@awesoon的幫助下,我能夠找到錯誤。

問題出在遷移文件0007_auto_20190130_1427.py

我有一個IntegerField的字符串默認值IntegerField default=''

migrations.AlterField(
    model_name='skater',
    name='time_on_ice_pp',
    field=models.IntegerField(default='', null=True),
),

需要將此默認值替換為任何整數。

migrations.AlterField(
    model_name='skater',
    name='time_on_ice_pp',
    field=models.IntegerField(default=10, null=True),
),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM