我尝试按照回答here中的说明操作,但没有奏效。我打赌由于以下原因:
我们现有的用户类是models.py,它是代理:
class User(auth_models.User):
"""
Wrapper to make methods on user_profile one call
"""
objects = UserManager()
def title(self):
# TODO This probably makes too many SQL queries by default?
return self.get_profile().title
class Meta:
proxy = True
UserProfile模型与内置用户表一对一:
import django.contrib.auth.models as auth_models
class UserProfile(models.Model):
user = models.OneToOneField(auth_models.User) ...
但其他模型使用代理类:
class Job(models.Model):
...
user = models.ForeignKey(User)
...
可以想象,代码的某些部分引用了代理类。
在这种情况下,有人可以建议对上述答案进行修改吗?我可以删除Meta /代理属性并感到高兴吗? UserProfile关系会发生什么?我不想在更新过程中丢失它,以便恢复数据并将其放入新的用户模型中(如新的Django 1.5允许)
更新1
我认为,我取得了一些进展。我还阅读this并做了以下事情:我在Job中为auth_models.User更改了对代理的引用。该应用程序继续工作:代理对外键是透明的,很好。
然后,我删除了用户中的代理元,并在回答上述问题时生成了迁移。现在我收到此错误报告:
CommandError: One or more models did not validate:
auth.user: Accessor for m2m field 'groups' clashes with related m2m field 'Group.user_set'. Add a related_name argument to the definition for 'groups'.
auth.user: Accessor for m2m field 'user_permissions' clashes with related m2m field 'Permission.user_set'. Add a related_name argument to the definition for 'user_permissions'.
tao.user: Accessor for m2m field 'groups' clashes with related m2m field 'Group.user_set'. Add a related_name argument to the definition for 'groups'.
tao.user: Accessor for m2m field 'user_permissions' clashes with related m2m field 'Permission.user_set'. Add a related_name argument to the definition for 'user_permissions'.
因此,在我看来,组和权限的相关内置表存在问题。有什么想法吗?