擅长:python、mysql、java
<p>我在寻找这个问题的答案,却找不到一个好的答案,这对Model.Model.delete()和QuerySet.delete()都有效。我一直在执行史蒂夫K的解决方案。我使用这个解决方案来确保对象(本例中的Employee)不能以任何方式从数据库中删除,而是设置为inactive。</p>
<p>这是个迟交的答复。。只是为了其他人看我把我的解决方案放在这里。</p>
<p>代码如下:</p>
<pre><code>class CustomQuerySet(QuerySet):
def delete(self):
self.update(active=False)
class ActiveManager(models.Manager):
def active(self):
return self.model.objects.filter(active=True)
def get_queryset(self):
return CustomQuerySet(self.model, using=self._db)
class Employee(models.Model):
name = models.CharField(name, unique=True)
active = models.BooleanField(default=True, editable=False)
objects = ActiveManager()
def delete(self):
self.active = False
self.save()
</code></pre>
<p>用法:</p>
<pre><code>Employee.objects.active() # use it just like you would .all()
</code></pre>
<p>或者在管理员:</p>
<pre><code>class Employee(admin.ModelAdmin):
def queryset(self, request):
return super(Employee, self).queryset(request).filter(active=True)
</code></pre>