对于以10为底的int(),Django无效文字:'??????? ???????'当我尝试迁移时

时间:2018-06-22 15:39:58

标签: python django

我正在尝试在添加到我的项目的新应用中创建新表。.makemigrations很好,但是migrate却不起作用..这是我的模型

blog / models.py

from django.db import models

# Create your models here.
from fostania_web_app.models import UserModel


class Tag(models.Model):
    tag_name = models.CharField(max_length=250)

    def __str__(self):
        return self.tag_name


class BlogPost(models.Model):
    post_title = models.CharField(max_length=250)
    post_message = models.CharField(max_length=2000)
    post_author = models.ForeignKey(UserModel, on_delete=models.PROTECT)
    post_image = models.ImageField(upload_to='documents/%Y/%m/%d', null=False, blank=False)
    post_tag = models.ForeignKey(Tag, on_delete=models.PROTECT)
    post_created_at = models.DateTimeField(auto_now=True)

当我尝试执行python manage.py migrate时出现此错误

invalid literal for int() with base 10: '??????? ???????'

UserModel 是在同一项目的另一个应用程序中创建的,这就是为什么我使用语句from fostania_web_app.models import UserModel

fostania_web_app / models.py

class UserModelManager(BaseUserManager):
    def create_user(self, email, password, pseudo):
        user = self.model()
        user.name = name
        user.email = self.normalize_email(email=email)
        user.set_password(password)
        user.save()

        return user

    def create_superuser(self, email, password):
        '''
        Used for: python manage.py createsuperuser
        '''
        user = self.model()
        user.name = 'admin-yeah'
        user.email = self.normalize_email(email=email)
        user.set_password(password)

        user.is_staff = True
        user.is_superuser = True
        user.save()

        return user


class UserModel(AbstractBaseUser, PermissionsMixin):
    ## Personnal fields.
    email = models.EmailField(max_length=254, unique=True)
    name = models.CharField(max_length=16)
    ## [...]

    ## Django manage fields.
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELD = ['email', 'name']

    objects = UserModelManager()

    def __str__(self):
        return self.email

    def get_short_name(self):
        return self.name[:2].upper()

    def get_full_name(self):
        return self.name

在我的 setting.py 文件中,我有以下内容:

#custom_user
AUTH_USER_MODEL='fostania_web_app.UserModel'

这是完整的traeback

Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, fostania_web
ons, sites, social_django
Running migrations:
  Applying blog.0001_initial...Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\core\management\__init__.py", line 371, in execute_from_comm
    utility.execute()
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\core\management\__init__.py", line 365, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\core\management\base.py", line 288, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\core\management\base.py", line 335, in execute
    output = self.handle(*args, **options)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\core\management\commands\migrate.py", line 200, in handle
    fake_initial=fake_initial,
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\migrations\executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=f
nitial=fake_initial)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\migrations\executor.py", line 147, in _migrate_all_forwar
    state = self.apply_migration(state, migration, fake=fake, fake_in
initial)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\migrations\executor.py", line 244, in apply_migration
    state = migration.apply(state, schema_editor)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\migrations\migration.py", line 122, in apply
    operation.database_forwards(self.app_label, schema_editor, old_st
t_state)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\migrations\operations\fields.py", line 84, in database_fo
    field,
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\backends\sqlite3\schema.py", line 306, in add_field
    self._remake_table(model, create_field=field)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\backends\sqlite3\schema.py", line 178, in _remake_table
    self.effective_default(create_field)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\backends\base\schema.py", line 240, in effective_default
    default = field.get_db_prep_save(default, self.connection)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\models\fields\related.py", line 936, in get_db_prep_save
    return self.target_field.get_db_prep_save(value, connection=conne
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\models\fields\__init__.py", line 767, in get_db_prep_save
    return self.get_db_prep_value(value, connection=connection, prepa
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\models\fields\__init__.py", line 939, in get_db_prep_valu
    value = self.get_prep_value(value)
  File "C:\Users\LiTo\AppData\Local\Programs\Python\Python36-32\lib\s
s\django\db\models\fields\__init__.py", line 947, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: '??? ??? ?????'

1 个答案:

答案 0 :(得分:5)

错误消息:ValueError: invalid literal for int() with base 10: '??? ??? ?????'

根据例外,以10为底的int():'??? ??? ?????'不符合int的资格。 在blog.0001_initial迁移中签入'??? ??? ?????',并使用有效的int修改该值。

在重新运行不是int()的makemigrations命令时,您可能不小心提供了垃圾默认值