Har*_*rry 3 django django-signals django-models
我有一个保存游览的模型.用户可以改变这次短途旅行,但我需要知道这次短途旅行之前的变化,因为我会记录每次短途旅行的"预订"次数,如果你改变了短途旅行,我需要删除一次预订.以前的游览.
我不完全确定应该怎么做.
我猜你用这个信号了吗?
我应该使用pre_save,pre_init还是最好用的?
pre_save看起来不正确,因为它打印新值,而不是我预期的"旧值"
@receiver(pre_save, sender=Delegate)
def my_callback(sender, instance, *args, **kwargs):
print instance.excursion
Run Code Online (Sandbox Code Playgroud)
你有几个选择吗?
第一个是覆盖保存方法:
#Delegate
def save(self, *args, **kwargs):
if self.pk:
previous_excursion = Delegate.objects.get(self.pk).excursion
super(Model, self).save(*args, **kwargs)
if self.pk and self.excursion != previous_excursion:
#change booking
Run Code Online (Sandbox Code Playgroud)
第二个是绑定功能到保存信号+ django模型utils字段跟踪器:
@receiver(post_save, sender=Delegate)
def create_change_booking(sender,instance, signal, created, **kwargs):
if created:
previous_excursion = get it from django model utils field tracker
#change booking
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是在运行时使用pre_save:
@receiver(pre_save, sender=Delegate)
def my_callback(sender, instance, *args, **kwargs):
previous_excursion = Delegate.objects.get(self.pk).excursion
if instance.pk and instance.excursion != previous_excursion:
#change booking
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3815 次 |
| 最近记录: |