代码之家  ›  专栏  ›  技术社区  ›  Pranay reddy

在“model”上应用makmigration时没有问题,但迁移命令引发异常“error”

  •  0
  • Pranay reddy  · 技术社区  · 6 年前

    在“model”上应用makmigation时没有问题,但migration命令引发异常“error”ValueError:int()的无效文本,以10为基数:“null”。 我在“emails\u for\u help”帮助字段中进行更改时出现此错误 我尝试了fake\u迁移和迁移,但没有用

    模型

    class Setup_user(models.Model):
    organization=models.CharField(max_length=200,blank=False,default="")
    email_id=models.EmailField(unique=True)
    CEO = 'CEO'
    GENERAL_MANAGER = 'GM'
    JCHOICES = (
        (CEO, 'CEO'),
        (GENERAL_MANAGER, 'General Manager'),
                )
    Designation = models.CharField(max_length=5,choices=JCHOICES)
    LEVEL1 = "L1"
    LEVEL2 = "L2"
    LCHOICES = (
        (LEVEL1,"Level 1"),
        (LEVEL2,"Level 2"),
    )
    job_level=models.CharField(max_length=2,choices=LCHOICES)
    EMAIL_CHOICES = ((str(q.email), str(q.email)) for q in User.objects.all())
    emails_for_help = MultiSelectField(choices=EMAIL_CHOICES,default="null",max_length=5000,help_text="select with whom you want to share knowledge")
    
    def __str__(self):
        return self.email_id
    

    错误:

    C:\Users\Ekatech7\PycharmProjects\baseproject>python manage.py migrate
     Operations to perform:
    Apply all migrations: admin, auth, contenttypes, pkm_app, sessions
    Running migrations:
    Applying pkm_app.0015_auto_20180417_1723...Traceback (most recent call 
    last):
    File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\core\management\__init__.py", line 371, in 
    execute_from_command_line
    utility.execute()
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\core\management\__init__.py", line 365, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\core\management\base.py", line 288, in run_from_argv
    self.execute(*args, **cmd_options)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\core\management\base.py", line 335, in execute
    output = self.handle(*args, **options)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\core\management\commands\migrate.py", line 200, in handle
    fake_initial=fake_initial,
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\db\migrations\executor.py", line 117, in migrate
     state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, 
    fake_initial=fake_initial)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\db\migrations\executor.py", line 147, in 
    _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, 
    fake_initial=fake_initial)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\db\migrations\executor.py", line 244, in apply_migration
    state = migration.apply(state, schema_editor)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\db\migrations\migration.py", line 122, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, 
    project_state)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\db\migrations\operations\fields.py", line 84, in 
    database_forwards
    field,
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\db\backends\sqlite3\schema.py", line 306, in add_field
    self._remake_table(model, create_field=field)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site  - 
    packages\django\db\backends\sqlite3\schema.py", line 178, in _remake_table
    self.effective_default(create_field)
    File "C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site- 
    packages\django\db\backends\base\schema.py", line 224, in effective_default
    default = field.get_db_prep_save(default, self.connection)
    

    文件“C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site”- 包\django\db\models\fields\related。py”,第936行,在get\u db\u prep\u save中 返回自我。target\u字段。get\u db\u prep\u save(值,连接=连接) 文件“C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site”- 软件包\django\db\models\fields\uu init\uuuuuuuuuuu。py”,第767行,在get\u db\u prep\u save中 返回自我。get\u db\u prep\u值(值,connection=连接,prepared=False) 文件“C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site”- 软件包\django\db\models\fields\uu init\uuuuuuuuuuu。py”,第939行,英寸 获取\u db\u prep\u值 值=自身。get\u prep\u值(value) 文件“C:\Users\Ekatech7\PycharmProjects\baseproject\venv\lib\site”- 软件包\django\db\models\fields\uu init\uuuuuuuuuuu。py”,第947行,在get\u prep\u值中 return int(值) ValueError:基数为10的int()的文本无效:“null”

    2 回复  |  直到 6 年前
        1
  •  0
  •   Carl Brubaker    6 年前

    你的 CHOICES 没有 ”null” 作为一种选择。如果希望存储空值,则必须设置 null=True ,这意味着 modelField blank=True ,空值将存储为null。如果您只是希望表单在加载时不选择选项,请不要设置 default 。错误正在查找:

    EMAIL_CHOICES = (
        (“null”, “null”)
        (str(q.email), str(q.email)
        )
    

    我想你也有 for 向后循环。我认为应该是:

    for q in User.objects.all():
        (str(q.email), str(q.email)
    
        2
  •  0
  •   Pranay reddy    6 年前

    问题已解决。 我在上述模型中选择的方法是错误的。 它是通过使用“emails for help”列的多对多关系和带有查询集方法的modelform来解决的。

    class Set_User_Form(ModelForm):
    emails_for_help= forms.ModelMultipleChoiceField(queryset=User.objects.all(),widget=forms.CheckboxSelectMultiple)
    class Meta:
        model=Setupuser
        exclude=["email_id"]