持续检测到 Django 1.7.2 迁移更改
Django 1.7.2 migration changes continuously detected
下面我的模型似乎在运行 makemigrations
时不断检测到改变的变化。在带有 South 的 Django 1.6.4 中情况并非如此。
您的模型具有尚未反映在迁移中的更改,因此不会应用。
运行 manage.py makemigrations
进行新迁移,然后重新运行 manage.py migrate
应用它们。
型号:
class Item (models.Model):
capacity = models.IntegerField(
default=500,
validators=[MinValueValidator(0)],
help_text="Total remaining quantity in stock."
)
total_purchased = models.IntegerField(
default=0,
validators=[MaxValueValidator(capacity)],
help_text="Total items purchased."
)
我通过注释掉 total_purchased 字段的验证器属性解决了这个问题。有没有办法在不删除验证器的情况下解决这个问题,同时仍然能够在 "total_purchased" 验证器中引用前一个字段 "capacity"?任何帮助将不胜感激。
您不能以这种方式在验证器中引用 capacity
。 MaxValueValidator
在加载 models.py 时实例化,而不是在验证特定项目时实例化 -- capacity
是模型字段,而不是特定项目的容量。
无法从验证器内部访问其他字段的值。当您需要执行依赖于多个字段的验证时,您可以创建自定义 clean()
方法:
class Item (models.Model):
capacity = models.IntegerField(
default=500,
validators=[MinValueValidator(0)],
help_text="Total remaining quantity in stock."
)
total_purchased = models.IntegerField(
default=0,
help_text="Total items purchased."
)
def clean(self):
"""
Ensures that total_purchased does not exceed the capacity
"""
if self.total_purchased > self.capacity:
raise ValidationError(
'Total purchased can not exceed the capacity'
)
下面我的模型似乎在运行 makemigrations
时不断检测到改变的变化。在带有 South 的 Django 1.6.4 中情况并非如此。
您的模型具有尚未反映在迁移中的更改,因此不会应用。
运行 manage.py makemigrations
进行新迁移,然后重新运行 manage.py migrate
应用它们。
型号:
class Item (models.Model):
capacity = models.IntegerField(
default=500,
validators=[MinValueValidator(0)],
help_text="Total remaining quantity in stock."
)
total_purchased = models.IntegerField(
default=0,
validators=[MaxValueValidator(capacity)],
help_text="Total items purchased."
)
我通过注释掉 total_purchased 字段的验证器属性解决了这个问题。有没有办法在不删除验证器的情况下解决这个问题,同时仍然能够在 "total_purchased" 验证器中引用前一个字段 "capacity"?任何帮助将不胜感激。
您不能以这种方式在验证器中引用 capacity
。 MaxValueValidator
在加载 models.py 时实例化,而不是在验证特定项目时实例化 -- capacity
是模型字段,而不是特定项目的容量。
无法从验证器内部访问其他字段的值。当您需要执行依赖于多个字段的验证时,您可以创建自定义 clean()
方法:
class Item (models.Model):
capacity = models.IntegerField(
default=500,
validators=[MinValueValidator(0)],
help_text="Total remaining quantity in stock."
)
total_purchased = models.IntegerField(
default=0,
help_text="Total items purchased."
)
def clean(self):
"""
Ensures that total_purchased does not exceed the capacity
"""
if self.total_purchased > self.capacity:
raise ValidationError(
'Total purchased can not exceed the capacity'
)