Invoice라는 모델의 delete 메소드를 재정의하려고합니다. 모델 송장은 모델 액션에서 ForeignKey에 의해 참조됩니다. https://stackoverflow.com/a/1539182delete_selected()를 재정 의하여 자식 모델의 필드를 업데이트하십시오.
나를 위해 작동하지 않습니다 : 대답
How do I override delete() on a model and have it still work with related deletes
: 나는 송장이
이 게시물에 설명 된 솔루션
을 삭제 때 모델 관리자에 청구라는 BooleanField를 업데이트 할 다음과 같이 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이 있습니다. 그러나 나는 또한 False로 청구서를 다시 설정해야합니다.
invoice = models.ForeignKey(Invoice, verbose_name = 'Rechnung', null=True, blank=True,on_delete=models.SET_NULL)
난 그냥 여기 관리자의 작업을 선택 삭제하는 것이 https://code.djangoproject.com/ticket/10751을 읽을 수는
내가 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)
시도) (삭제와 overridde 수 없습니다
자기 대신 obj를 사용하려고했지만 해결책이 아닙니다.
"작동하지 않는다"는 것은 무엇을 의미합니까? 작업 객체가 업데이트되지 않거나 삭제되지 않은 송장 객체입니까? 또는 둘 다입니까? 오류가 발생 했습니까? – scoopseven
송장이 업데이트 (삭제)되었지만 작업에 아무런 변화가 없습니다. delete() 또는 delete_selected() 액션은 오버라이드되지 않았습니다. 이제는 get_actions 및 del deleted_selected와 함께 작동하고 사용자 정의 작업 delete_model을 모델에 전달합니다. – surfi