1

我尝试按照此处的说明进行回答,但没有奏效。我打赌是因为以下几点:

  1. 我们有一个现有的 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
    
  2. UserProfile 模型与内置的 User 表是一对一的:

    import django.contrib.auth.models as auth_models 
    
    class UserProfile(models.Model):
        user = models.OneToOneField(auth_models.User) ...
    
  3. 但其他模型使用代理类:

    class Job(models.Model):
        ...
        user = models.ForeignKey(User)
        ...
    

可以想象,代码的某些部分引用了代理类。

有人可以在这种情况下对上述答案提出变化吗?我可以删除 Meta/proxy 属性并感到高兴吗?UserProfile 关系会发生什么?我不想在更新过程中丢失它,以便恢复该数据并将其放入新的用户模型中(新的 Django 1.5 允许)

更新 1

我想,我取得了一些进展。我也阅读了这篇文章并做了以下事情:

  1. 我更改了对 auth_models.User 的 Job 中代理的引用。该应用程序继续工作:代理对外键是透明的,很好。

  2. 然后我在我们的用户中删除了代理元数据,并按照上述问题的答案生成了迁移。现在我收到此错误报告:

    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'.
    

因此,在我看来,组和权限的相关内置表存在问题。有任何想法吗?

4

0 回答 0