我正在编写一个小型数据迁移,为没有UserProfiles的现有Django用户创建UserProfiles。
def forwards(self, orm):
"Write your forwards methods here."
for user in User.objects.all():
try:
person = user.get_profile()
except:
newperson = orm.Person(user=user)
newperson.save()
但我一直在
"Person.user" must be a "User" instance
我做错了什么?
答案 0 :(得分:2)
在南方编写迁移时,您不必直接使用模型类,而是使用冻结模型类。在上面的示例中,您可能尝试将当前的 User 对象分配给冻结的 Person 对象。冻结的 Person 对象需要冻结的用户对象。
您需要按如下方式重写它:
def forwards(self, orm):
"Write your forwards methods here."
for user in orm['auth.User'].objects.all():
try:
# cannot use user.get_profile() because it is not available in the frozen model
person = orm.Person.get(user=user)
except:
newperson = orm.Person(user=user)
newperson.save()
请参阅http://south.readthedocs.org/en/latest/ormfreezing.html#accessing-the-orm
顺便说一句,我建议你不要使用除之外的,但除了SomeException 之外的要更强大。