【问题标题】:Cannot import models to signals.py or tasks.py (django)无法将模型导入到 signals.py 或 tasks.py (django)
【发布时间】:2019-06-28 09:17:35
【问题描述】:

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

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

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

文件“c:/Users/Acer/PycharmProjects/mbapi/api/signals.py”,第 5 行,在 from api import testModel ModuleNotFoundError: No module named 'api

信号.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>

【问题讨论】:

  • 此错误日志消息与您粘贴的代码不匹配。你能显示完整的错误日志吗?
  • 为什么不直接使用from .models import testModel?这样您的导入将独立于应用名称。
  • @Paandittya 当我尝试在这里遇到不同的错误时。 (venv) C:\Users\Acer\PycharmProjects\mbapi>c:/Users/Acer/PycharmProjects/mbapi/venv/Scripts/python.exe c:/Users/Acer/PycharmProjects/mbapi/api/signals.py Traceback (最近一次通话):文件“c:/Users/Acer/PycharmProjects/mbapi/api/signals.py”,第 5 行,在 from .models import testModel ModuleNotFoundError: No module named 'main.模型'; 'main' 不是包
  • 可以假设您没有意外删除任何 init.py 文件或调整任何 django 生成的文件吗?
  • @Paandittya 那里的所有 init.py 文件

标签: python django


【解决方案1】:

您已经在第一行导入了TestModel

from api.models import TestModel

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

from api import testModel

删除它。

【讨论】:

  • 我已经删除了第二次导入,但我有同样的错误。
  • @tomoc4 查找您的问题中未列出的其他导入行,这些行执行from api import...。如果您的 models.py 错误应该更改为 No module named 'api.models' 但它没有,那么它应该是别的东西。
  • @Kyryl Havrylenko 我刚刚发布了完整的堆栈跟踪。我在这里看到了类似的问题,可能是这个问题吗? stackoverflow.com/questions/3108694/…
  • @tomoc4 如果您在 models.py 中导入了信号,则可能是这样。即使更新的问题也没有models.py 的内容
  • models.py 添加到问题中
【解决方案2】:

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

您似乎正在直接运行该文件。虽然可能,但在使用 Django 时单独运行每个文件并不是很有用。

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

如果您想测试您的功能,我建议您在应用程序urls 中获取基本的url 设置(例如http://localhost:8000/testapi),并让视图在您习惯使用时运行快速测试代码工具。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2016-08-13
    • 2020-06-25
    • 2017-10-21
    相关资源
    最近更新 更多