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' 是可以的,为什么这里失败呢?
正如 @Jayesh 的链接所解释的,您不应该这样做,因为这些方法稍后可能会从您的代码中消失,并且会破坏您的迁移。
但是,您可以非常确定您将运行此迁移一次,并且永远不会再回来,或者如果出于任何其他原因您想冒这个风险并重用您的财产,也许是因为它很丑陋,那么您可以通过导入来完成它您的迁移和使用该属性的真实模型,如下所示:
from models import ModelFoo
ModelFoo.full_name.fget(foo)
Run Code Online (Sandbox Code Playgroud)
其中foo是示例中的变量(南迁模型类的实例)。
这就是从另一个类调用属性的方式,如此处所述。
| 归档时间: |
|
| 查看次数: |
2959 次 |
| 最近记录: |