我正试图找出如何在我的项目中避免依赖注入。应用程序目录中有一个文件notifications.py
文件notifications.py包含向管理员和用户发送电子邮件的方法。要获取管理员电子邮件,我需要检查SystemData模型的对象。但在模型中,我使用通知。
模型

class SystemData(models.Model):
    admin_alerts_email = models.EmailField(verbose_name=u'Emailová adresa admina')
    contact_us_email = models.EmailField(verbose_name=u'Adresa kontaktujte nás')
    waiting_threshold = models.PositiveSmallIntegerField(verbose_name=u'Maximálny počet minút čakania')

class SomeModel(models.Model):
    ....
    def save(...):
        notifications.send_message_to_admin('message')

通知.py
from django.core.mail import EmailMessage
from models import SystemData

def send_message_to_admin(message):
    mail = EmailMessage(subject, message, to=[SystemData.objects.all().first().admin_email])
    mail.send()

Django返回它不能导入SystemData
你知道怎么办吗?
编辑:
stacktrace

python - 如何避免在Django中进行依赖注入(inject)?-LMLPHP

最佳答案

通过使用内联导入,可以解决函数中的循环依赖关系:

class SomeModel(models.Model):
    ....
    def save(...):
        from .notifications import send_message_to_admin
        send_message_to_admin('message')

这将延迟import语句,直到函数实际执行,因此models模块已经加载。然后,notifications模块可以安全地导入models模块。

10-07 17:50