django 1.8 makemigrations"未检测到任何变化"

时间:2016-03-06 08:03:35

标签: django django-models

我想了解我错过了什么。

我之前的模型:

class sectorToMapXY(models.Model):
    pos     = models.IntegerField()
    name    = models.CharField(max_length=15)
    mapX    = models.FloatField(default=0)
    mapY    = models.FloatField(default=0)
    destMap = models.ForeignKey(Document, related_name='%(class)s_docfile')

更改后的模型(更新了destMap中的on_delete删除):

class sectorToMapXY(models.Model):
    pos     = models.IntegerField()
    name    = models.CharField(max_length=15)
    mapX    = models.FloatField(default=0)
    mapY    = models.FloatField(default=0)
    destMap = models.ForeignKey(Document, related_name='%(class)s_docfile',on_delete=models.SET(-1))

运行python manage.py makemigrations时,它会返回No changes detected

on_delete更改为SET_NULLSET_DEFAULT时,它会检测到更改。

更新

我还没有设置SET_NULL或SET_DEFAULT,因此在尝试运行时会返回错误(但它会检测到更改):

SystemCheckError: System check identified some issues:
ERRORS:
dashboard.sectorToMapXY.destMap: (fields.E321) Field specifies on_delete=SET_DEFAULT, but has no default value.
    HINT: Set a default value, or change the on_delete rule.

添加models.ForeignKey(Document, related_name='%(class)s_docfile',null=True,on_delete=models.SET_NULL)时 正在运行python manage.py makemigrations会返回No changes detected

1 个答案:

答案 0 :(得分:0)

我无法在django 1.8上重现您的错误。

但是,我不确定在设置makemigrationson_delete=SET_NULLon_delete=SET_DEFAULT命令是如何成功运行的,因为您遗漏了null=Truedefault=default_value在字段定义。

如果这是您第一次在应用上处理migrations,则应该运行:

$ python manage.py makemigrations your_app_label

按照规定here