与Django中的自定义用户模型相关的fields.E300错误

时间:2015-02-25 09:24:57

标签: python django

我正在研究这个项目,我正在扩展Django的基本用户模型,以便将电子邮件作为用户名。我有两个应用程序(客户和展厅)的以下项目结构

。项目

..客户

......模特

....客户

..陈列室

......模特

....图片

客户端继承AbstractBaseUser,如下所示:

class Client(AbstractBaseUser):
    email = models.CharField(max_length=255, unique=True)
    firstname = models.CharField(max_length=50)
    etc...

图片有我的客户端模型的外键:

class Image(models.Model):
    client = models.ForeignKey(_('Client'), settings.AUTH_USER_MODEL, blank=True, null=True, limit_choices_to=Q(groups__name = 'website_user'))
    etc...

在我的settings.py中(不称为settings.py,不要认为它是相关的,只是以防万一)我有这个:

INSTALLED_APPS = (
    'django.contrib.auth',
    etc...
    'client',
    'showroom',
    etc...
)

AUTH_USER_MODEL = 'client.Client'

现在,当我尝试运行项目,syncdb,migrate或与数据库有关的任何其他内容时,我收到此错误:

showroom.Image.client: (fields.E300) Field defines a relation with model 'Client', which is either not installed, or is abstract.

当然,当我在Image模型中删除Client的外键时,一切正常。

我已经搜索了很多,大多数解决方案表明我的应用程序没有正确安装,但它们似乎在我的配置文件中显示。所以我想这与继承django的AbstractBaseUser有关,但我不明白为什么这对我不起作用,因为我的代码与官方文档中的代码非常相似。

无论如何,提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

ForeignKey的第一个参数应该是模型或模型的名称。您通过_('Client')我认为verbose_name

试试这个:

client = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('Client'), blank=True, null=True, limit_choices_to=Q(groups__name = 'website_user'))