我从另一个应用程序导入模型时遇到问题.我在用Django 2.0.
我的项目结构如下所示:
--api
--api
--settings.py
--urls.py
--wsgi.py
--product
--models.py
--chat
--models.py
--manage.py
Run Code Online (Sandbox Code Playgroud)
为了显示我遇到的问题,我简化了结构.如果你遗漏了重要的东西,请告诉我.
导致错误的文件:
聊天/ models.py
from api.product.models import Product
from django.contrib.auth.models import User
from django.db import models
class Chat(models.Model):
product = models.ForeignKey(Product)
enquirer = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
产品/ models.py
from django.db import models
from django.contrib.auth.models import User
class Product(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
category = models.ForeignKey(Category, related_name='category', on_delete=None)
front_image = models.ImageField(upload_to="")
title = models.CharField(max_length=100)
price = models.PositiveIntegerField()
description = models.CharField(max_length=5000)
date = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
settings.py
INSTALLED_APPS = [
'account.apps.AccountConfig',
'product.apps.ProductConfig',
'profileInfo.apps.ProfileInfoConfig',
'chat.apps.ChatConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
]
Run Code Online (Sandbox Code Playgroud)
错误如下:ModuleNotFoundError: No module named 'api.product'我不明白为什么Django甚至找不到api.product.
这是一个常见的问题吗?谢谢您的帮助.
我发现使用 Python 3.x 对我有用的解决方案
...
from django.apps import apps
...
然后无论您需要在代码中的哪个位置导入模型,您都可以执行以下操作。
...
model = apps.get_model('app_name', 'ModelName')
...
根据您的设置和文件目录,项目根目录是最新的app目录.这意味着您可以通过编写以下方式导入模型:
from product.models import ProductRun Code Online (Sandbox Code Playgroud)
代替:
from api.product.models import ProductRun Code Online (Sandbox Code Playgroud)
如果您的IDE建议导入,项目根目录可能有问题.
| 归档时间: |
|
| 查看次数: |
2217 次 |
| 最近记录: |