将我的signals.py文件保存在django中的正确位置 [英] the right place to keep my signals.py files in django
问题描述
model.py
from django.contrib .auth.models import来自django.db的用户
导入模型
from django.utils.translation import gettext as _
from signals import *
class Comm_Queue(CommunicatorAbstract):
queue_statuses =(
('P',_('Pending')),
('S',_('Sent')),
('E' ''''''''''''''''''''''''''''''' ')
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 djan go.conf导入设置
from django.db.models.signals import pre_save
from django.dispatch import receiver
from models import Comm_Queue
@接收方(pre_save,sender = Comm_Queue)
def get_sender_email_from_settings(sender,** kwargs):
obj = kwargs ['instance']
如果不是obj.sender_email:
obj。 sender_email ='%s'%settings.ADMINS [0] [1]
此代码不会运行因为我在内部输入Comm_queue信号,并且正在进行*导入到models.py中的信号中。可以任何一个建议我怎么能过来这个问题?
敬意,
原始答案,对于Django< 1.7:
您可以通过在应用程序的 __ init__中导入
文件: signals.py
来注册信号.py
#__init__.py
导入信号
这将允许从<$ c $中导入 models.py
c> signals.py 没有循环导入错误。
这种方法的一个问题是,如果您使用coverage.py。
编辑:对于Django> = 1.7:
引入了AppConfig,导入信号的推荐方式是它的 init()
函数。有关详细信息,请参阅 Eric Marcos的答案。
based on the documentation i was reading from django site, It seems like signals.py in the app folder is a good place to start with, but the problem am facing is that when I create signals for pre_save and I try to import the class from model, it conflicts with the import operation for task in model. see my code below
model.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]
this code will not run because am import Comm_queue inside signals and am doing * import to signals inside models.py. can any one advice how I could over come this issue?
regards,
Original answer, for Django < 1.7:
You can register the signals by importing signals.py
in the app's __init__.py
file:
# __init__.py
import signals
This will allow to import models.py
from signals.py
without circular import errors.
One problem with this approach is that it messes up the coverage results if you're using coverage.py.
Edit: For Django >= 1.7:
Since AppConfig was introduced, the recommended way of importing signals is in it's init()
function. See Eric Marcos' answer for more details.
这篇关于将我的signals.py文件保存在django中的正确位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!