Mil*_*ano 1 python django django-signals django-models django-database
当一个字段发生变化时,我需要做一些动作.
由于此操作需要使用已保存的对象,我不能使用这样的pre_save信号:
@receiver(pre_save, sender=reservation_models.Reservation)
def generate_possible_pairs(sender, instance, **kwargs):
try:
reservation_old = sender.objects.get(pk=instance.pk)
except sender.DoesNotExist:
pass # Object is new, so field hasn't technically changed, but you may want to do something else here.
else:
if not reservation_old.datetime == instance.datetime: # Field has changed
do_something(instance) # It would be better to be sure instance has been saved
Run Code Online (Sandbox Code Playgroud)
是否有可能使用post_save信号?
我想避免为此模型添加临时属性.
使用post_save信号,您将无法从db检索以前的状态 - 但为什么要使用信号呢?
class Reservation(models.Model):
def save(self, *args, **kw):
old = type(self).objects.get(pk=self.pk) if self.pk else None
super(Reservation, self).save(*args, **kw)
if old and old.datetime != self.datetime: # Field has changed
do_something(self)
Run Code Online (Sandbox Code Playgroud)
您可能还想阅读:https://lincolnloop.com/blog/django-anti-patterns-signals/
| 归档时间: |
|
| 查看次数: |
2832 次 |
| 最近记录: |