我正在做一个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']
2条答案
按热度按时间cbeh67ev1#
您可以使用以下命令导入:
但通常最好使用**
settings.AUTH_USER_MODEL
**[Django-doc]来引用用户模型。实际上,在设置中,您将其指定为:然后改为使用设置:
无论您选择哪种选项,都可能在IDE中将“源根目录”设置在了错误的目录上。这应该是
chat_app_backend
中的chat_app_backend
。给予目录起一个不同的名称可能更好,特别是如果目录或文件与其父目录同名,这可能会引起很多混淆。acruukt92#
试试这个:
os.path.abspath(__file__)
给出当前文件models.py的绝对路径,然后os.path.dirname()
函数返回包含该文件的目录,这里是chat目录。最后我们使用sys.path.append()
将其添加到Python路径中。