【问题标题】:Django 1.7.2 migration changes continuously detected不断检测到 Django 1.7.2 迁移变化
【发布时间】:2015-01-08 00:09:47
【问题描述】:

下面我的模型在运行makemigrations 时似乎不断检测到更改的变化。在 Django 1.6.4 with South 中情况并非如此。

您的模型具有尚未反映在迁移中的更改,因此不会应用。 运行 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”验证器中的前一个字段“容量”?任何帮助将不胜感激。

【问题讨论】:

    标签: python django django-migrations


    【解决方案1】:

    你不能以这种方式在验证器中引用capacityMaxValueValidator 是在加载 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'
                )
    

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 2015-09-05
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2017-08-22
      • 2021-09-19
      • 2019-05-30
      • 2020-07-02
      相关资源
      最近更新 更多