我尝试按照此处的说明进行回答,但没有奏效。我打赌是因为以下几点:
我们有一个现有的 User 类是 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 模型与内置的 User 表是一对一的:
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/proxy 属性并感到高兴吗?UserProfile 关系会发生什么?我不想在更新过程中丢失它,以便恢复该数据并将其放入新的用户模型中(新的 Django 1.5 允许)
更新 1
我想,我取得了一些进展。我也阅读了这篇文章并做了以下事情:
我更改了对 auth_models.User 的 Job 中代理的引用。该应用程序继续工作:代理对外键是透明的,很好。
然后我在我们的用户中删除了代理元数据,并按照上述问题的答案生成了迁移。现在我收到此错误报告:
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'.
因此,在我看来,组和权限的相关内置表存在问题。有任何想法吗?