是否允许在Django南迁移中使用Model属性,为什么?

时间:2015-08-05 09:10:26

标签: python django django-south

我正在使用south在Django中进行架构和数据迁移。我有这样的模型:

class ModelFoo(models.Model):
    first_name = models.CharField()
    last_name = models.CharField()

    @property
    def full_name(self):
        return self.first_name + self.last_name

在南方数据迁移代码中,我想直接使用full_name,如下所示:

foo.full_name

但我收到了一个错误:

AttributeError: 'ModelFoo' object has no attribute 'full_name'

这里出了什么问题?我确定在Django的视图代码中使用'full_name'是可以的,为什么它在这里失败了?

1 个答案:

答案 0 :(得分:1)

正如@ Jayesh的链接所解释的那样,你不应该这样做,因为这些方法可能会在你的代码中消失,并且会破坏你的迁移。

然而,您可能非常确定您将运行此迁移一次,并且永远不会回来,或者由于任何其他原因您想要冒这个风险并重新使用您的属性,可能因为它很难看,那么您将完成它通过在迁移中导入您的真实模型并使用该属性,如下所示:

from models import ModelFoo
ModelFoo.full_name.fget(foo)

其中foo是您示例中的变量(南迁移模型类的实例)。

这就是你从另一个类调用属性的方法,如here所述。