从另一个应用程序Django导入模型

时间:2018-06-03 19:24:57

标签: django

我在从其他应用导入模型时遇到问题。我正在使用Django 2.0

我的项目结构如下:

--api
  --api
    --settings.py
    --urls.py
    --wsgi.py
  --product
    --models.py
  --chat
    --models.py
--manage.py

为了显示我遇到的问题,我简化了结构。如果你遗漏了重要的东西,请告诉我。

导致错误的文件:

聊天/ 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)

产品/ 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)

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',
]

错误如下:ModuleNotFoundError: No module named 'api.product'我不明白为什么Django甚至找不到api.product

这是一个常见的问题吗?谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

根据您的设置和文件目录,项目根目录是最新的app目录。这意味着您可以通过编写:

来导入模型
from product.models import Product

而不是:

from api.product.models import Product

如果您的IDE建议导入,项目根目录可能有问题。

答案 1 :(得分:3)

我发现适用于Python 3.x的解决方案

...
from django.apps import apps
...

,然后在代码中需要导入模型的任何地方,都可以执行以下操作。
...
model = apps.get_model('app_name', 'ModelName')
...