Django South:访问模型的 __unicode__() 方法
Django south: access model's __unicode__() method
在django south数据迁移文件中,如何访问模型的__unicode__()
方法?
这是一个简单的例子:
我在 models.py 中有一个人 class:
class Person(models.Model):
name = models.CharField(max_length=255)
def __unicode__(self):
return self.name
然后我创建了一个数据迁移
python manage.py datamigration myapp check_person
在数据迁移文件中,我有
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
for person in orm.Person.objects.all():
print person
它不打印人名,而是打印
Person object
Person object
...
当我这样做时:
from myapp.models import Person
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
print hasattr(orm.Person, '__unicode__')
print hasattr(Person, '__unicode__')
它打印
False
True
我的问题是那些是预期的吗?为什么 south orm 不能访问 __unicode__()
方法?我怎样才能访问它?
编辑:
from myapp.models import Person
并通过 Person.objects.all()
直接访问 Person 对象对我不起作用,因为 Person 模型将在下一次迁移中从 models.py 中删除。
您可能想要导入原始 Person
模型并查询该模型,而不是使用 orm.Person.objects.all()
。 orm.Person
和Person
不是一回事,它有点依赖于每个迁移文件末尾定义的大数据结构models
来计算模型信息。
但是,如果您的原始模型已更改,orm.Model
仍然可以使用,这就是为什么 south 可以使用有更改的模型,model
变量拍摄 [=33= 的快照] 创建时。
South doc explains this in details.
South doesn’t freeze every aspect of a model; for example, it doesn’t
preserve new managers, or custom model methods, as these would require
serialising the python code that runs those method (and the code that
depends on, and so forth).
编辑:
听起来 OP 想将模型 __unicode__
属性 用于某些目的,但模型将在之后立即删除。由于在这种情况下会发生导入错误,我不会再使用 __unicode__
,而是建议通过使用 orm.Model
手动访问模型字段来处理这个问题(因为 __unicode__
由无论如何字段值)。
在django south数据迁移文件中,如何访问模型的__unicode__()
方法?
这是一个简单的例子:
我在 models.py 中有一个人 class:
class Person(models.Model):
name = models.CharField(max_length=255)
def __unicode__(self):
return self.name
然后我创建了一个数据迁移
python manage.py datamigration myapp check_person
在数据迁移文件中,我有
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
for person in orm.Person.objects.all():
print person
它不打印人名,而是打印
Person object
Person object
...
当我这样做时:
from myapp.models import Person
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
print hasattr(orm.Person, '__unicode__')
print hasattr(Person, '__unicode__')
它打印
False
True
我的问题是那些是预期的吗?为什么 south orm 不能访问 __unicode__()
方法?我怎样才能访问它?
编辑:
from myapp.models import Person
并通过 Person.objects.all()
直接访问 Person 对象对我不起作用,因为 Person 模型将在下一次迁移中从 models.py 中删除。
您可能想要导入原始 Person
模型并查询该模型,而不是使用 orm.Person.objects.all()
。 orm.Person
和Person
不是一回事,它有点依赖于每个迁移文件末尾定义的大数据结构models
来计算模型信息。
但是,如果您的原始模型已更改,orm.Model
仍然可以使用,这就是为什么 south 可以使用有更改的模型,model
变量拍摄 [=33= 的快照] 创建时。
South doc explains this in details.
South doesn’t freeze every aspect of a model; for example, it doesn’t preserve new managers, or custom model methods, as these would require serialising the python code that runs those method (and the code that depends on, and so forth).
编辑:
听起来 OP 想将模型 __unicode__
属性 用于某些目的,但模型将在之后立即删除。由于在这种情况下会发生导入错误,我不会再使用 __unicode__
,而是建议通过使用 orm.Model
手动访问模型字段来处理这个问题(因为 __unicode__
由无论如何字段值)。