Skip to main content
 首页 » 编程设计

python之持续检测到 Django 1.7.2 迁移更改

2025年05月04日30fff_TT

下面我有一个模型,它似乎在运行 makemigrations 时持续检测更改的变化。在带有 South 的 Django 1.6.4 中情况并非如此。

您的模型具有尚未反射(reflect)在迁移中的更改,因此不会应用。 运行 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 字段的 validators 属性解决了这个问题。有没有办法在不删除验证器的情况下解决这个问题,同时仍然能够在“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' 
            )