ModuleNotFoundError:Django项目中没有名为'chat_app_backend.authentication'的模块

lmyy7pcs  于 2023-04-22  发布在  Go
关注(0)|答案(2)|浏览(332)

我正在做一个Django项目,当我试图从www.example.com文件中的chat_app_backend.authentication导入User模型时,得到以下错误models.py:
ModuleNotFoundError: No module named 'chat_app_backend.authentication'
以下是我的models.pychat.models的www.example.com文件中的代码:

from django.db import models
from chat_app_backend.authentication.models import User

class ChatRoom(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    picture = models.ImageField(upload_to='chatroom_pictures/', null=True, blank=True)
    number_of_users = models.IntegerField()
    messages = models.TextField()

以下是我安装的应用程序:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'authentication.apps.AuthenticationConfig',
    'chat.apps.ChatConfig'
]

这里是我的models.py我的身份验证。型号:

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    bio = models.CharField(max_length=500)
    profile_picture = models.ImageField(upload_to='profile_pictures/')

下面是我的项目的文件结构:

chat_app_backend
    -chat_app_backend
        -authentication
        -chat
        -chat_app_backend

我已经尝试了这篇文章中提供的解决方案(Django : Unable to import model from another App),但它不适合我。
显然,这个问题不仅仅与用户模型有关,当我试图访问身份验证应用程序(serializers.py)中的UserSerializer时,它也会给我同样的错误。

from chat_app_backend.authentication.serializers import UserSerializer
ModuleNotFoundError: No module named 'chat_app_backend.authentication'

以下是serializers.py聊天应用程序中www.example.com的代码:

from rest_framework import serializers
from .models import ChatRoom
from chat_app_backend.authentication.serializers import UserSerializer

class ChatRoomSerializer(serializers.ModelSerializer):
    owner = UserSerializer(read_only=True)

    class Meta:
        model = ChatRoom
        fields = ['id', 'owner', 'picture', 'number_of_users', 'messages']
cbeh67ev

cbeh67ev1#

您可以使用以下命令导入:

from authentication.models import User

但通常最好使用**settings.AUTH_USER_MODEL**[Django-doc]来引用用户模型。实际上,在设置中,您将其指定为:

# settings.py

AUTH_USER_MODEL = 'authentication.User'

然后改为使用设置:

from django.conf import settings
from django.db import models

class ChatRoom(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    # …

无论您选择哪种选项,都可能在IDE中将“源根目录”设置在了错误的目录上。这应该是chat_app_backend中的chat_app_backend。给予目录起一个不同的名称可能更好,特别是如果目录或文件与其父目录同名,这可能会引起很多混淆。

acruukt9

acruukt92#

试试这个:

import os
import sys

# Add the chat_app_backend directory to the Python path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from chat_app_backend.authentication.models import User

os.path.abspath(__file__)给出当前文件models.py的绝对路径,然后os.path.dirname()函数返回包含该文件的目录,这里是chat目录。最后我们使用sys.path.append()将其添加到Python路径中。

相关问题