【发布时间】:2014-10-12 16:29:46
【问题描述】:
我的 django 项目实现了一个自定义用户模型 (MyUser)。它还为我的自定义用户实现了一个代理模型(MyUserProxy),我想使用代理模型从我的数据库中删除用户。请参阅下面的模型和经理,
project/account/models.py
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.db import models
from .managers import MyUserManager
class MyUser(AbstractUser, PermissionsMixin):
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
username = models.CharField(max_length=255, unique=True)
email = models.CharField(max_length=255, unique=True)
...
objects = MyUserManager()
class Meta():
verbose_name = _('My user')
verbose_name_plural = _('My users')
def __unicode__(self):
return self.username
class MyUserProxy(MyUser):
class Meta():
proxy = True
project/account/managers.py
from django.contrib.auth.models import UserManager
class MyUserManager(UserManager):
def __init__(self, *args, **kwargs):
super(MyUserManager, self).__init__(*args, **kwargs)
我的项目中的几个其他应用程序与我的自定义用户 (MyUser) 有 ForeignKey 关系,因此当我删除一个用户时,与该用户相关的记录也会被删除。当我在我的 settings.py 中将 AUTH_USER_MODEL 指定为 MyUser 时,这样就可以正常工作,并且来自相关应用的记录会随用户一起删除。
project/example/settings.py
AUTH_USER_MODEL = 'account.MyUser'
但是,当我为 AUTH_USER_MODEL 使用 MyUserProxy 时,我收到了一个错误,
OperationalError: (1054, "Unknown column 'otherapp.myuserproxy_id'
in 'where clause'")
Django 似乎认为应用程序“otherapp”的 ForeignKey 数据库列是“myuserproxy_id”,而实际上是“myuser_id”,因为模型 MyUser 指定了它。为什么 django 将我的代理模型 (MyUserProxy) 的名称与数据库列相关联?
https://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models
【问题讨论】:
标签: django python-2.6