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

Dan*_*Dai 5 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
Run Code Online (Sandbox Code Playgroud)

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

foo.full_name
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

AttributeError: 'ModelFoo' object has no attribute 'full_name'
Run Code Online (Sandbox Code Playgroud)

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

smi*_*ido 1

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

但是,您可以非常确定您将运行此迁移一次,并且永远不会再回来,或者如果出于任何其他原因您想冒这个风险并重用您的财产,也许是因为它很丑陋,那么您可以通过导入来完成它您的迁移和使用该属性的真实模型,如下所示:

from models import ModelFoo
ModelFoo.full_name.fget(foo)
Run Code Online (Sandbox Code Playgroud)

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

这就是从另一个类调用属性的方式,如此处所述