模型要么未安装,要么是抽象的 - 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】:

您不应将 'settings.AUTH_USER_MODEL' 用作字符串 literal,因为这样 Django 将在 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 the User model section of the documentation。

【讨论】:

以上是关于模型要么未安装,要么是抽象的 - Django、Python的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo

Django表单API详解

Django 表单API详解

具有未继承约束的 Django 模型抽象模型:“约束”指的是字段“xxx”,它不是模型“Foo”的本地字段

5分钟实现SpringBoot整合Dubbo构建分布式服务

php面向对象