当前位置: 首页 > 面试题库 >

将我的signal.py文件保留在Django项目中的正确位置

段宏毅
2023-03-14
问题内容

根据我正在阅读的Django文档,似乎signals.py在app文件夹中是一个不错的起点,但是我面临的问题是,当我为创建信号pre_save并尝试从模型中导入类时,它与import在我的模型中。

# models.py

from django.contrib.auth.models import User
from django.db import models
from django.utils.translation import gettext as _
from signals import *

class Comm_Queue(CommunicatorAbstract):
    queue_statuses = (
        ('P', _('Pending')),
        ('S', _('Sent')),
        ('E', _('Error')),
        ('R', _('Rejected')),
    )
    status          = models.CharField(max_length=10, db_index=True, default='P')
    is_html         = models.BooleanField(default=False)
    language        = models.CharField(max_length=6, choices=settings.LANGUAGES)
    sender_email    = models.EmailField()
    recipient_email = models.EmailField()
    subject         = models.CharField(max_length=100)
    content         = models.TextField()
# signals.py

from django.conf import settings
from django.db.models.signals import pre_save
from django.dispatch import receiver
from models import Comm_Queue

@receiver(pre_save, sender=Comm_Queue)
def get_sender_email_from_settings(sender, **kwargs):
    obj=kwargs['instance']
    if not obj.sender_email:
        obj.sender_email='%s' % settings.ADMINS[0][1]

此代码将无法运行,因为我Comm_Queue在内部signals.py导入了信号,也在内部也导入了信号models.py。

谁能建议我如何解决这个问题?


问题答案:

对于Django <1.7的原始答案:
你可以通过导入signals.py应用程序的__init__.py文件来注册信号:

# __init__.py
import signals

这将允许从中进行导入models.py,signals.py而不会出现循环导入错误。

这种方法的一个问题是,如果你使用coverage.py,它会弄乱覆盖率结果。



 类似资料:
  • 问题内容: 下面的代码可以正常工作,但是每次运行时都会将字体文件的副本保留在temp目录中。这些文件名为 +〜JF7154903081130224445.tmp ,其中每个创建的文件的数字似乎都是随机的。 我在sun.com的论坛上以及在Web上的其他资源中发现了多年的讨论,这些讨论被认为是JDK中的错误,从1.5.0_06升级到1.5.0_08可以解决问题;但是,我使用的版本是更高版本(1.6.

  • 问题内容: 我在为Django项目设置DJANGO_SETTINGS_MODULE时遇到麻烦。 我有一个目录。在此目录中,我有一个用virtualenv设置的虚拟环境,还有一个名为的Django项目,其中包含一个名为“ onora”的应用程序。从运行 向我显示以下内容: 我正在尝试使用以下命令从数据库中转储数据 我的方法是先跑再跑再跑 但是,我收到以下错误: 我进行了一些谷歌搜索,发现了以下页面:

  • 问题内容: 我应该在Eclipse项目中的哪个位置添加文件,以便它可以按预期工作? 问题答案: 您可以将其添加到任意位置,在运行项目时,通过单击以下命令来配置类路径并添加log4j.properties文件的位置:运行->运行配置-> [类路径选项卡]->单击用户条目- >高级->选择添加文件夹->选择log4j.properties文件的位置 然后->确定->运行 它应该被加载

  • 最近,我开始使用spring boot,我正在尝试将我的旧spring项目转换为使用它,所有这些项目都是web应用程序。我设法编译、打包和运行应用程序,但当我尝试在浏览器中访问它们时,我无法访问我的视图。 首先,我尝试将jsp页面放在通常的文件夹src/main/webapp/WEB-INF/jsp中,但在从官方留档中阅读本文后: http://docs.spring.io/spring-boot

  • 问题内容: 我已经在Eclipse中创建了一个新项目,并且想要包含ANTLR jar文件。 在项目中引用jar文件之前,通常将它们放置在哪里?您是在eclipse中创建“源目录”还是常规的“目录”?然后您从那里引用它们吗? 我希望能够轻松地传输该项目,而不必在我的项目文件夹外声明对jar文件的引用,但是我不确定Java世界中的常规约定是什么。 任何指导将不胜感激。 问题答案: 我通常创建一个/ l

  • 在eclipse中显示以下错误: 不再支持此不推荐使用的功能。移除;您可以使用'lombok.anyconstructor.suppressConstructorProperties=true'创建lombok.config文件。 我创建了这个文件,但是在注释@AllArgsConstructor行之后,错误并没有消失。 我使用的是lombok版本,也尝试过版本,但问题相同。