【问题标题】:Django: How to create a signal for deleting a instance of pre_save signal?Django:如何创建用于删除 pre_save 信号实例的信号?
【发布时间】:2019-03-28 11:19:26
【问题描述】:

我的模型中有以下 pre_save 信号:

@receiver(pre_save, sender=Purchase)
def user_created_purchase_cgst(sender,instance,*args,**kwargs):
    c = Journal.objects.filter(user=instance.user, company=instance.company).count() + 1
    if instance.cgst_alltotal != None and instance.cgst_alltotal != 0:
        Journal.objects.update_or_create(
            user=instance.user,
            company=instance.company,
            by=ledger1.objects.filter(user=instance.user,company=instance.company,name__icontains='CGST').first(),
            to=instance.party_ac,
            defaults={
                'counter' : c,
                'date': instance.date,
                'voucher_id' : instance.id,
                'voucher_type' : "Journal",
                'debit': instance.cgst_alltotal,
                'credit': instance.cgst_alltotal}
            )

我想创建另一个类似于上面的信号,当发送者被删除时,发送者实例也将被删除。

即当 Purchase 对象被删除时,由 pre_save 信号创建的相应 Journal 对象将被删除。

知道如何执行此操作吗?

谢谢

【问题讨论】:

  • 您的问题令人困惑。您的代码中没有任何内容被删除。你到底想做什么。
  • 请阅读我的问题,我说我想创建另一个信号,以便在删除发件人时删除实例
  • 为什么不直接使用 django 的 pre_deletepost_delete 内置信号? docs.djangoproject.com/en/2.1/ref/signals/#pre-delete
  • 我实际上是 django 的新手,并没有使用太多 pre_delete 信号...所以我想知道应该怎么做
  • 我会为你写一个正确的答案。

标签: django django-signals


【解决方案1】:

会是这样的:

@receiver(pre_delete, sender=Purchase)
def delete_related_journal(sender, instance, **kwargs):
    journal = instance.journal # instance is your Purchase instance that is
    # about to be deleted
    journal.delete()

但请注意,如果 Journal purchase Foreign Key 设置为 on_delete=models.CASCADE,则您根本不必这样做。因此,如果没有设置 CASCADE,您可能希望使用信号来代替。

class JournalModel(models.Model):
    # Your other fields here
    purchase = models.ForeignKey(Purchase, on_delete=models.CASCADE)

更多关于pre_delete信号:docs

【讨论】:

  • from django.db.models.signals import pre_delete from django.dispatch import receiver 是所需的导入
猜你喜欢
  • 2011-12-22
  • 2019-08-17
  • 2017-04-26
  • 2011-09-03
  • 2019-09-09
  • 2014-04-15
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多