2012-08-14 2 views
3

나는 장고를 배우며, 내 경비 등을 추적 할 회계 응용 프로그램을 만들고자합니다.django와 회계 응용 프로그램의 잔액을 업데이트하는 방법은 무엇입니까?

계정과 조작을위한 두 가지 모델로 데이터베이스를 만들었습니다. 하지만 각 작업마다 내 균형을 유지하는 방법을 모릅니다.

나는 새 작업을 저장할 때마다 Operation Model의 save 메서드를 재정 의하여 잔액을 업데이트하겠습니까? 하지만이 경우 실수를하고 하나의 작업을 삭제해야하는 경우 잔액이 업데이트되지 않습니다. 맞습니까?

나는 나 또한 .. 모든 균형의 역사 있지만, 작업을 삭제하는 경우에는 다음 같은 문제와 더불어, BalanceHistory 모델을 만들 수

내가 보는 가장 좋은 방법은 내 균형 때마다 동적으로 업데이트하는 것입니다 생각 그 시간에 모든 작업을 추가하여 표시하고 싶습니다.하지만 어떻게 할 수 있는지는 알 수 없습니다 ..

누군가 그것에 대한 통찰력이 있다면, 좋을 것입니다. 순전히 장고 관련 문제가 아니라는 것을 알고 있지만 장고와 함께 작업 할 때 장고 기능을 사용하여 아이디어를 찾을 수 있다면 좋을 것입니다!

시간과 도움을 미리 보내 주셔서 감사합니다.

+2

몇 가지 코드를 표시할까요 ?? 그리고 당신이 그것을 기대하고 ... – Jingo

답변

3

당신이 맞다는 것은 당연한 일입니다. 계정의 전체 내역을 기반으로 모든 읽을 때 동적으로 계산하는 것 외에는 정확한 균형을 보장 할 방법이 없습니다.

그런 식으로 선택하면 Django ORM의 aggregation features을 사용하여 작업 합계를 계산할 수 있습니다. 당신이 작업을했다 예를 들어, 필드라는 amount, 계산할 수있는 수 (해당 작업에 대한 균형의 변화를 나타내는 양수 또는 음수)의 균형과 같은 :

Operation.objects.filter(account=my_account).aggregate(balance=Sum('amount')) 

당신이 원하는하지 않은 경우 어떤 이유로 든 사용자 정의 save 메소드를 사용하여 실행중인 잔액을 유지할 수 있습니다. save과 같은 delete method을 사용하여 개별 항목 삭제를 처리 할 수 ​​있습니다.

그러나이 메서드는 savedelete 메서드를 호출하지 않으므로 대량 삽입, 업데이트 또는 삭제 또는 원시 SQL 작업을 수행하는 경우 문제가 발생합니다. 그러나 이러한 기능을 사용해야하는 경우 하이브리드 방식을 사용할 수 있습니다. 일회성 트랜잭션을 수행 할 때 savedelete 옵션을 사용하고 오류를 수정하기 위해 주기적으로 전체 재 계산을 트리거하거나 당신이 알고있는 수술은 균형을 망칠 것입니다.

+0

정확한 답변을 주셔서 감사합니다! 나는 집계 기능으로 동적 업데이트를 할 것이라고 생각합니다. 더 유연하고 유지하기 쉽습니다. – Serphone

관련 문제