Invoice という名前のモデルの削除メソッドをオーバーライドしようとしています。モデル Invoice は、モデル Action の ForeignKey によって参照されます。請求書が削除されたときに、モデル管理者で請求されたという名前の BooleanField を更新したい
この投稿で説明されているソリューション:
モデルで delete() をオーバーライドし、関連する削除で引き続き機能させるにはどうすればよいですか
その答え: https://stackoverflow.com/a/1539182
models.py でこのように機能していません:
def delete(self):
Action.objects.filter(invoice=self).update(billed=False) # and tried 0 instead of False
super(Invoice,self).delete()
も試しました:
def delete(self):
actions = Action.objects.filter(invoice=self)
for action in actions:
action.billed=False # and tried 0 instead of False
action.save()
super(Invoice,self).delete()
モデル アクションの ForeignKey フィールドには、請求書が削除されたときにアクションを削除しないように on_delete=models.SET_NULL があります。しかし、billed を False に戻す必要もあります。
invoice = models.ForeignKey( Invoice, verbose_name = 'Rechnung', null=True, blank=True,on_delete=models.SET_NULL)
ここでhttps://code.djangoproject.com/ticket/10751を読みましたが、管理者では選択した削除アクションを delete() でオーバーライドできませんでした
代わりに delete_view() を使用する必要があります
だから私は試しました
def delete_selected(self, request, obj, extra_context=None):
Action.objects.filter(invoice=self).update(billed=False)
super(InvoiceAdmin, self).delete_view(request, obj, extra_context)
また、自己の代わりに obj を使用しようとしましたが、解決策ではありません