Python 确定Django模型是否标记为删除

Python 确定Django模型是否标记为删除,python,django,django-models,django-signals,Python,Django,Django Models,Django Signals,我的例子很做作,但希望它能让人明白这一点 假设我有两个这样的模型: class Group(models.Model): name = models.CharField(max_length=50) class Member(models.Model): name = models.CharField(max_length=50) group = models.ForeignKey(Group) 我想添加一些代码,这样当一个成员被删除时,它就会被重新创建为一个新条目(

我的例子很做作,但希望它能让人明白这一点

假设我有两个这样的模型:

class Group(models.Model):
    name = models.CharField(max_length=50)

class Member(models.Model):
    name = models.CharField(max_length=50)
    group = models.ForeignKey(Group)
我想添加一些代码,这样当一个
成员被删除时,它就会被重新创建为一个新条目(请记住,非常做作!)。所以我这样做:

@receiver(post_delete, sender=Member)
def member_delete(sender, instance, **kwargs):
    instance.pk = None
    instance.save()
这对于删除
成员
非常有效

但是,问题是如果删除了
,则调用相同的处理程序。通过引用
重新创建
成员
,并在发生最终提交时抛出
IntegrityError

在信号处理程序中是否有任何方法可以确定正在删除
Group

我所尝试的:

  • 发送方
    似乎始终是
    成员
  • 我似乎在
    instance.group
    上找不到任何指示删除的内容。即使尝试执行
    Group.objects.filter(id=instance.Group\u id).exists()
    也会返回true。可能是在对子对象执行
    post_delete
    调用之后,才实际删除父对象,在这种情况下,我尝试执行的操作是不可能的

试着在成员类中使用classmethod来完成您的工作,而不要考虑信号

@classmethod
def reinit(cls, instance):
    instance.delete()
    instance.save()

试着在成员类中使用classmethod来完成您的工作,而不要考虑信号

@classmethod
def reinit(cls, instance):
    instance.delete()
    instance.save()

删除具有相关成员的组时,最终结果应该是什么?@knbk-应该删除
成员
,而不是移动到另一个
。因此,默认情况下,如果没有信号处理程序,您使用的是什么数据库,您的事务的隔离级别是什么?@knbk-Postgres并且每个web请求上都有一个事务当删除一个有相关成员的组时,最终结果应该是什么?@knbk-应该删除
成员,而不是移动到另一个
。因此,如果没有信号处理程序,默认情况下会发生。您使用的是什么数据库,事务的隔离级别是什么?@knbk-Postgres,每个web requestyes上都有一个事务,但是您必须始终记住调用该方法。在调用
.delete()
.yes后调用该信号。您只需记住调用reinit而不是delete.yes,但是您必须始终记住调用该方法。在调用
.delete()
.yes后调用该信号。你只需要记住调用reinit而不是delete。