无法将模型导入signals.py或tasks.py(Django)

时间:2019-02-04 15:33:10

标签: python django

我无法在Django应用中导入模型。 我的应用程序API已安装并迁移并在管理员中可见,我可以通过admin添加记录,以便模型可以正常工作。

由于某种原因,当我尝试将模型导入到signals.py时出现错误 我正在使用Django 2.0

signals.py与模型位于同一目录。 Django是否更改了导入模型的方式?我的印象就是那样。

  

文件“ c:/Users/Acer/PycharmProjects/mbapi/api/signals.py”,第5行,在          从api导入testModel ModuleNotFoundError:没有名为“ api

的模块

signals.py

from django.dispatch import receiver
from django.db.models.signals import pre_save, pre_delete, post_save, 
post_delete
from django.dispatch import receiver
from api.models import testModel



@receiver(post_save, sender=testModel)
def update(sender, instance, created, **kwargs):
    if instance.status == 'inplay':
        print('this is inplay')
        send()

models.py

from django.db import models
# Create your models here.
class testModel(models.Model):     
    player1 = models.CharField(null=True, max_length=50)
    player2 = models.CharField(null=True, max_length=50)
    Player1_odds = models.FloatField(null=True)
    Player2_odds = models.FloatField(null=True)
    status = models.CharField(null=True, max_length=50)
    complete = models.CharField(null=True, max_length=50)

class inplay_model(models.Model):
    now_inplay = models.CharField(null=True, max_length=10)

堆栈跟踪

    (venv) C:\Users\Acer\PycharmProjects\mbapi>c:/Users/Acer/PycharmProjects/mbapi/venv/Scripts/python.exe c:/Users/Acer/PycharmProjects/mbapi/api/signals.py
    Traceback (most recent call last):
    File "c:/Users/Acer/PycharmProjects/mbapi/api/signals.py", line 5, in <module>
        from api.models import testModel
    ModuleNotFoundError: No module named 'api'

    (venv) C:\Users\Acer\PycharmProjects\mbapi>

2 个答案:

答案 0 :(得分:0)

您已经在第一行中导入了TestModel

from api.models import TestModel

导致错误的行尝试从应用程序根目录导入testModel

from api import testModel

只需将其删除。

答案 1 :(得分:0)

导入问题很可能是因为(C:/Users/Acer/PycharmProjects/mbapi/)中缺少sys.path

似乎您正在直接运行文件。可能的话,使用Django时单独运行每个文件不是很有用。

Django更适合runserver命令,以确保为您正确设置PATH并运行所有需要的文件。

如果您随后要测试功能,建议您进行基本的url设置(例如http://localhost:8000/testapi)或在应用程序urls中进行设置,并让视图简单地运行快速测试代码当您习惯使用这些工具时。

要断言导入工作正常,您只需在导入后 添加打印并使用python manage.py runserver。启动代码运行时,您应该看到打印内容(注意:,您需要在signals.py函数下导入app.py文件,例如def ready(self):