模型要么未安装,要么是抽象的 - Django、Python
Posted
技术标签:
【中文标题】模型要么未安装,要么是抽象的 - Django、Python【英文标题】:Model is either not installed, or is abstract - Django, Python 【发布时间】:2020-08-03 06:19:51 【问题描述】:当我迁移下面的代码时,我收到以下错误----错误: users.UserStripe.user:(fields.E300)字段定义了与模型“settings.AUTH_USER_MODEL”的关系,该模型要么未安装,要么是抽象的。 users.UserStripe.user: (fields.E307) 字段 users.UserStripe.user 被声明为对“settings.auth_user_model”的惰性引用,但未安装应用程序“settings”。--- 我知道这与我在条带和配置文件类中有“用户”的事实有关,但我不确定如何停止错误。任何指导将不胜感激!
models.py - 用户
import stripe
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
stripe.api_key = '****************'
class UserStripe(models.Model):
**user = models.OneToOneField('settings.AUTH_USER_MODEL', on_delete=models.CASCADE)**
stripe_id = models.CharField(max_length=120)
def __str__(self):
return str(self.stripe_id)
class Profile(models.Model):
**user = models.OneToOneField(User, on_delete=models.CASCADE)**
image = models.ImageField(default='', upload_to='profile_pics')
def __str__(self):
return f'self.user.username Profile'
【问题讨论】:
【参考方案1】:您不应将 用作字符串 literal,因为这样 Django 将在 'settings.AUTH_USER_MODEL'
settings
应用程序中查找名为 AUTH_USER_MODEL
的模型。但是没有设置应用,也没有同名的模型。
你应该传递settings.AUTH_USER_MODEL
的值:
from django.db import models
from django.conf import settings
class UserStripe(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
stripe_id = models.CharField(max_length=120)
def __str__(self):
return str(self.stripe_id)
class Profile(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
image = models.ImageField(default='', upload_to='profile_pics')
def __str__(self):
return f'self.user.username Profile'
注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc] 引用用户模型比直接使用User
model [Django-doc] 更好。更多信息可以查看referencing theUser
model section of the documentation。
【讨论】:
以上是关于模型要么未安装,要么是抽象的 - Django、Python的主要内容,如果未能解决你的问题,请参考以下文章