【问题标题】:valueError: invalid literal for int() with base 10: '' while migratevalueError: int() 的无效文字,基数为 10: '' while migrate
【发布时间】:2019-08-16 00:15:54
【问题描述】:

我在 django-2 中编写了这个简单的模型,当我尝试迁移时,我得到了

ValueError: int() 以 10 为底的无效文字:''

from django.db import models

class Teacher(models.Model):
    name = models.CharField(max_length=50)
    user = models.IntegerField(default='',blank=True)
    passcode = models.IntegerField(default='',blank=True)

    def __str__(self):
        return self.name


class Student(models.Model):
    name = models.CharField(max_length=50)
    user = models.IntegerField(default='', blank=True)
    passcode = models.IntegerField(default='', blank=True)
    teacher = models.ManyToManyField(Teacher)   

    def __str__(self):
        return self.name

class Lesson (models.Model):
    name = models.CharField(max_length=50)
    cource = models.IntegerField(default='', blank=True)
    teacher = models.ForeignKey("Teacher", on_delete=models.CASCADE)
    Student = models.ManyToManyField(Student)

    def __str__(self):
        return self.name

class Score(models.Model):
    score = models.FloatField(default='', blank=True)
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    lesson = models.ForeignKey(Lesson, on_delete=models.CASCADE)

【问题讨论】:

    标签: python django python-3.x django-models


    【解决方案1】:

    IntegerFieldFloatField 的默认值不能是字符串。

    default='' 表示一个空字符串。

    IntegerFieldFloatField 的默认值更改为某个数字或设置null=True

    示例:

    # Means it can not be empty and if it received empty, put 0 instead.
    score = models.FloatField(default=0, blank=True)
    

    或者

    # Means it is okay to be empty.
    score = models.FloatField(null=True, blank=True)
    

    此外,您可能需要删除以前更改的迁移文件。

    【讨论】:

    • 谢谢兄弟。你能解释一下为什么我应该删除上次迁移吗?
    • 迁移文件是使用以前的更改构建的,即 default=' ' 并且停止使用新更改完成迁移。如果再次出现错误,请尝试删除它们,如果没有,则不需要。
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多