Fixed bug in review deletion
When a review was not the latest it would cause a bug on deletion of the latest. We changed the logic to work with the latest vote versus the previous to fix this issue. Now all review deletion ensure a consistent latest vote state.
This commit is contained in:
		
							parent
							
								
									e5f87cce90
								
							
						
					
					
						commit
						2c46e56b35
					
				
					 1 changed files with 11 additions and 10 deletions
				
			
		|  | @ -130,21 +130,22 @@ class Review(models.Model): | ||||||
|             proposal=self.proposal, |             proposal=self.proposal, | ||||||
|             user=self.user, |             user=self.user, | ||||||
|         ) |         ) | ||||||
|         # find previous vote before self |  | ||||||
|         try: |         try: | ||||||
|             previous = user_reviews.filter(submitted_at__lt=self.submitted_at).order_by("-submitted_at")[0] |             # find the latest review | ||||||
|  |             latest = user_reviews.exclude(pk=self.pk).order_by("-submitted_at")[0] | ||||||
|         except IndexError: |         except IndexError: | ||||||
|             # did not find a previous which means this must be the only one. |             # did not find a latest which means this must be the only one. | ||||||
|             # treat it as a last, but delete the latest vote. |             # treat it as a last, but delete the latest vote. | ||||||
|             self.proposal.result.update_vote(self.vote, removal=True) |             self.proposal.result.update_vote(self.vote, removal=True) | ||||||
|             lv = LatestVote.objects.filter(proposal=self.proposal, user=self.user) |             lv = LatestVote.objects.filter(proposal=self.proposal, user=self.user) | ||||||
|             lv.delete() |             lv.delete() | ||||||
|         else: |         else: | ||||||
|             # handle that we've found a previous vote |             # handle that we've found a latest vote | ||||||
|             # check if self is the last vote |             # check if self is the lastest vote | ||||||
|             if self == user_reviews.order_by("-submitted_at")[0]: |             if self == latest: | ||||||
|                 # self is the latest which means we need to treat as last. |                 # self is the latest review; revert the latest vote to the | ||||||
|                 # revert the latest vote to previous vote. |                 # previous vote | ||||||
|  |                 previous = user_reviews.filter(submitted_at__lt=self.submitted_at).order_by("-submitted_at")[0] | ||||||
|                 self.proposal.result.update_vote(self.vote, previous=previous.vote, removal=True) |                 self.proposal.result.update_vote(self.vote, previous=previous.vote, removal=True) | ||||||
|                 lv = LatestVote.objects.filter(proposal=self.proposal, user=self.user) |                 lv = LatestVote.objects.filter(proposal=self.proposal, user=self.user) | ||||||
|                 lv.update( |                 lv.update( | ||||||
|  | @ -152,8 +153,8 @@ class Review(models.Model): | ||||||
|                     submitted_at=previous.submitted_at, |                     submitted_at=previous.submitted_at, | ||||||
|                 ) |                 ) | ||||||
|             else: |             else: | ||||||
|                 # self is not the latest so we just need to decrement the |                 # self is not the latest review so we just need to decrement | ||||||
|                 # comment count |                 # the comment count | ||||||
|                 self.proposal.result.comment_count = models.F("comment_count") - 1 |                 self.proposal.result.comment_count = models.F("comment_count") - 1 | ||||||
|                 self.proposal.result.save() |                 self.proposal.result.save() | ||||||
|         # in all cases we need to delete the review; let's do it! |         # in all cases we need to delete the review; let's do it! | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Brian Rosner
						Brian Rosner