擅长:python、mysql、java
<p>如果您知道永远不会有任何大规模的员工删除尝试,您可以覆盖模型上的<code>delete</code>,并且只有在合法操作时才调用<code>super</code>。</p>
<p>不幸的是,任何可能调用<code>queryset.delete()</code>的内容都将直接转到SQL:
<a href="http://docs.djangoproject.com/en/dev/topics/db/queries/#deleting-objects">http://docs.djangoproject.com/en/dev/topics/db/queries/#deleting-objects</a></p>
<p>但我不认为这是个大问题,因为你是编写这段代码的人,可以确保员工永远不会有任何<code>queryset.delete()</code>。手动调用<code>delete()</code>。</p>
<p>我希望删除员工是比较少见的。</p>
<pre><code>def delete(self, *args, **kwargs):
if not self.related_query.all():
super(MyModel, self).delete(*args, **kwargs)
</code></pre>