我正在研究这个项目,我正在扩展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有关,但我不明白为什么这对我不起作用,因为我的代码与官方文档中的代码非常相似。
无论如何,提前感谢您的帮助。
答案 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'))