Django忽略模型字段

时间:2019-08-27 11:21:12

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

所以,当我从事一个项目时碰到了这个问题。

我在我的一个模型中的一个字段之后错误地加了一个“,”,而Django在忽略该特定字段的同时进行了所有迁移。我花了一段时间才意识到该字段负责我的字段未反映在数据库中。

但是,我知道应该不会出现昏迷,但我有点期待Django给我一个错误或至少一个警告。

类似的东西: “ ModelName.py中FieldName附近的语法无效”

编辑: “您确定要将一个或多个模型字段存储为元组吗?”

但它会忽略该特定字段并继续进行迁移。我的问题是,为什么Django让这种情况发生?这是预期的行为,Django是否不应该通知此类情况?或为什么要默默地传递它。

这里是一个例子。

class person(models.Model):
    name = models.CharField(max_length=10)
    surname = models.CharField(max_length=10),
    age = models.PositiveIntegerField()

现在,如果您创建迁移并应用迁移,那么Django会简单地忽略此处的姓氏字段并应用迁移而不会出现任何错误,为什么会这样呢?

1 个答案:

答案 0 :(得分:2)

这不是无效语法。通过添加结尾逗号,可以将字段包装为单例元组。因此person.surname的类型为tuple

例如,如果您写:

>>> a = 1,
>>> a
(1,)
>>> type(a)
<class 'tuple'>

除了模型字段外,模型还可以包含各种东西:常量,子类,方法等。

一个人可以在所有字段中进行详尽的搜索,等等,以检查元组是否包装了模型字段,但这可能会花费大量时间,可能会导致评估惰性属性,甚至可能陷入无限循环。

不过,可以将其添加到flake8-django [GitHub]中。