我是django的新手,并且遇到了一些问题。
这是我以前的模特。
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
我向该模型添加了一些数据。 在此之后我增加了一个外地来的。 现在我的模型看起来像这样。
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
age = models.IntegerField()
运行命令python manage.py makemigrations
时出现以下明显错误。
You are trying to add a non-nullable field 'age' to blog without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
我不想添加默认,因此我通过访问db.sqlite3
删除了表内容但是再次运行python manage.py makemigrations
之后,我仍然遇到相同的错误。为什么?
答案 0 :(得分:1)
即使您删除了表,对Django模型的任何更改仍将始终引用该模型的先前迁移,因此仍然需要您设置默认值。如果您仍在开发中,则可以删除该模型的迁移,然后再次进行迁移。但是,这是一种糟糕的做法,除非您有意识地挤压模型,否则永远不要这样做,更好的方法是执行Django告诉您的操作并设置默认值。从长远来看,这将有助于错误处理。
其他答案解决了如何很好地设置默认值。
答案 1 :(得分:0)
当你添加一个新的字段(即列)到数据库表,该字段适用于所有表中的行...的现有和任何新的问题。如果该字段不能null
,则一些值必须为所有现有的行指定。
默认情况下,IntegerField()
是不可为空。这就解释了为什么你所得到的警告。您有几种选择:
blank
和null
在模型字段参数,可以现场接受空值。对于最后一个选项,您需要这样做:
models.IntegerField(blank=True, null=True)
但是,这可能不是取决于你的使用情况的最佳选择。如果可为空的值对您的字段没有意义,那么我将避免使该字段支持null。
答案 2 :(得分:0)
age = models.IntegerField(null=True)
Django模型字段是空值设置为true默认情况下。
答案 3 :(得分:0)
解决此问题的方法:
希望这可以解决您的问题。
答案 4 :(得分:0)
按照Django的要求进行操作,然后在不需要时可以删除default
属性。但这还是一个好习惯