“Person.user”必须是“用户”实例

时间:2014-10-26 08:06:15

标签: python django django-south

我正在编写一个小型数据迁移,为没有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
我做错了什么?

1 个答案:

答案 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 之外的要更强大。