我正在使用Django 1.8。
以下是我的signals.py
:
from django.db.models.signals import post_save
from django.dispatch import receiver
from datetime import datetime
from models import Watch, LastUpdated
@receiver(post_save, sender=Watch)
def my_handler(sender, **kwargs):
obj = LastUpdated.objects.all()
current_datetime = datetime.now()
if obj:
obj.last_updated = current_datetime
else:
obj = LastUpdated(last_updated=current_datetime)
obj.save()
我的 models.py
class LastUpdated(models.Model):
last_updated = models.DateTimeField(auto_now=True)
class Watch(models.Model):
brand = models.CharField(max_length=255)
model_name = models.CharField(max_length=255)
dial_image = models.ImageField(upload_to='watch/')
hour_hand = models.ImageField(upload_to='watch/')
minute_hand = models.ImageField(upload_to='watch/')
second_hand = models.ImageField(upload_to='watch/')
product_url = models.URLField()
status = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
如何将信号与模型连接?
在早期版本中,我们使用models.py文件中的post_save.connect(my_handler, sender=Watch)
,但不再使用(根据文档)。我们现在怎么做?我不太了解文档。
答案 0 :(得分:0)
确保您的应用程序导入signals.py
(读取“已调用”):
import yourapp.signals
或者,您可以按照docs (section Where should this code live?)中的建议使用AppConfig.ready()
方法。
答案 1 :(得分:0)
只是为了向您展示正确的例子。
使用类似于此的内容创建AppConfig:
# my_app/apps.py
import logging
from django.apps import AppConfig
_logger = logging.getLogger(__name__)
class AppConfig(AppConfig):
name = "my_app"
label = "My App"
def ready(self):
_logger.info("'%s' completed initialisation.", self.label)
import my_app.signals
请记住在导入AppConfig的设置中正确注册了您的应用
# settings.py
# ...
INSTALLED_APPS = (
# ...
'my_app.apps.AppConfig',
)
现在,如果您运行本地服务器,您应该能够在应用程序准备就绪时从日志中看到初始化语句。如果您没有配置LOGGING工具,则可以使用print
代替_logger.info
。
my_app/signals.py
是您在问题中提到的文件。