【问题标题】:django error in import users.signals into apps.py in users app将 users.signals 导入用户应用中的 apps.py 时出现 django 错误
【发布时间】:2021-06-13 23:28:23
【问题描述】:

以下是我的 settings.py 安装的应用部分

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',

    # third party
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'rest_auth.registration',
    'corsheaders',
    'crispy_forms',
    # local apps
    'users.apps.UsersConfig',
]
AUTH_USER_MODEL = 'users.CustomUser'

以下是我的apps.py文件内容

from django.apps import AppConfig


class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

以下是我的signal.py文件内容

from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile


@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()

init用户应用中的.py 文件为空

当我运行命令 python manage.py makemigrations 它给出错误 ModuleNotFoundError: No module named 'users.users' 它还在apps.py的以下行中显示错误“No module named users” 导入 users.signals

我的项目目录结构截图如附图所示 [在此处输入图片说明][1]

  [1]: https://i.stack.imgur.com/PNU7p.png

参考上面的 django 配置/代码,解决 apps.py 中的错误需要进行哪些更正,以便解决任何名为 users 的模块并为用户应用程序正确加载信号

编辑:根据其他用户提供解决方案的需要,我目前正在开发的自定义用户模型如下

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import ugettext_lazy as _

from .managers import CustomUserManager


class CustomUser(AbstractUser):

    CHOICES = (
        ('T', 'Teacher'),
        ('I', 'Institute'),
        ('S', 'Student'),
    )

    role = models.CharField(max_length=1, choices=CHOICES)
    email = models.EmailField(_('email address'), unique=True)
    date_of_birth = models.DateField(blank=True, null=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email


class Student(models.Model):
    user_student = models.OneToOneField(
        CustomUser, on_delete=models.CASCADE, related_name="student_account"
    )
    standard = models.IntegerField(blank=True, null=True)


class Profile(models.Model):
    user_profile = models.OneToOneField(
        CustomUser, on_delete=models.CASCADE, related_name="profile"
    )
    location = models.CharField(max_length=140, blank=True, null=True)
    gender = models.CharField(max_length=140, default="Male", blank=True, null=True)

    def __unicode__(self):
        return u'Profile of user: %s' % self.user_profile.email


class Teacher(models.Model):
    user_teacher = models.OneToOneField(
        CustomUser, on_delete=models.CASCADE, related_name="teacher_account"
    )
    years_of_Experience = models.IntegerField(blank=True, null=True)


class Institute(models.Model):
    user_institute = models.OneToOneField(
        CustomUser, on_delete=models.CASCADE, related_name="Institute_account"
    )
    zip = models.CharField(max_length=30, null=True, blank=True)


class StudentProfile(models.Model):
    user_student_profile = models.OneToOneField(
        Student, on_delete=models.CASCADE, related_name="student_profile"
    )
    is_disabled = models.BooleanField(default=False, blank=True, null=True)

    def __unicode__(self):
        return u'Profile of Student: %s' % self.user_student_profile.user_student.email


class TeacherProfile(models.Model):
    user_teacher_profile = models.OneToOneField(
        Teacher, on_delete=models.CASCADE, related_name="teacher_profile"
    )
    subject = models.CharField(max_length=140, blank=True, null=True)

    def __unicode__(self):
        return u'Profile of teacher : %s' % self.user_teacher_profile.user_teacher.email


class InstituteProfile(models.Model):
    user_institute_profile = models.OneToOneField(
        Institute, on_delete=models.CASCADE, related_name="institute_profile"
    )
    subject = models.CharField(max_length=140, blank=True, null=True)

    def __unicode__(self):
        return u'Profile of Institute : %s' % self.user_institute_profile.user_institute.email

【问题讨论】:

  • 能否将'users' 添加到INSTALLED_APPS 并检查一下。
  • 按照建议将 settings.py 中的 INSTALLE_APPS 部分从“users.apps.UsersConfig”更改为“users”,仍然显示没有名为 users 的模块错误,但在删除迁移文件和数据库后,重新迁移它可以启动服务器。在 Apps.py 中,如果条目更改为导入 HelloDjangoUsersSite.users.signals,则它不会显示任何模块错误,但在运行服务器时会显示错误文件“D:\djangoprojects\hellodjangousers\HelloDjangoUsersSite\users\apps.py”,第 8 行,准备好导入 HelloDjangoUsersSite.users.signals ModuleNotFoundError: No module named 'HelloDjangoUsersSite.users'
  • 你能发布你的整个项目结构吗?
  • 目录结构截图可在i.stack.imgur.com/PNU7p.png获得 HelloDjangoUsersSite 是包含 settings.py 的项目,而用户是包含 apps.py 的应用程序
  • 您正在使用自定义用户模型AUTH_USER_MODEL = 'users.CustomUser'。你能分享你的users.models.py 代码吗?

标签: python django signals


【解决方案1】:

一切看起来都很好。我认为错误的原因是因为INSTALLED_APPS 中的应用程序顺序。

像这样更改您的INSTALLED_APPS 并检查。

INSTALLED_APPS = [
     # local apps
    'users.apps.UsersConfig',
    
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
     
    # third party
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'rest_auth.registration',
    'corsheaders',
    'crispy_forms',
]

【讨论】:

  • 它仍然在 pycharm IDE 中显示错误,并且可以使用命令 makemigrations、migrate 和 runserver 但是当项目打开时没有显示 VS Code 错误,因此将问题标记为已解决
  • 可能是因为配置不当。 SO中有很多问题解决了代码在一个IDE中工作而在其他IDE中不起作用的问题。你可以通过它们。 @好奇圣
猜你喜欢
  • 2019-07-16
  • 2015-10-10
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多