diff --git a/reviewboard/reviews/views.py b/reviewboard/reviews/views.py
index 69e18ddefc10b2b1da734db685d6e627f1536b0a..15f372333efe6359e06a92ad71d44a47edf2238e 100644
--- a/reviewboard/reviews/views.py
+++ b/reviewboard/reviews/views.py
@@ -370,11 +370,20 @@ def review_detail(request,
         # If the review request is public and pending review and if the user
         # is logged in, mark that they've visited this review request.
         if review_request.public and review_request.status == "P":
-            visited, visited_is_new = ReviewRequestVisit.objects.get_or_create(
-                user=request.user, review_request=review_request)
-            last_visited = visited.timestamp.replace(tzinfo=utc)
-            visited.timestamp = timezone.now()
-            visited.save()
+            try:
+                visited, visited_is_new = \
+                    ReviewRequestVisit.objects.get_or_create(
+                        user=request.user, review_request=review_request)
+                last_visited = visited.timestamp.replace(tzinfo=utc)
+                visited.timestamp = timezone.now()
+                visited.save()
+            except ReviewRequestVisit.DoesNotExist:
+                # Somehow, this visit was seen as created but then not
+                # accessible. We need to log this and then continue on.
+                logging.error('Unable to get or create ReviewRequestVisit '
+                              'for user "%s" on review request at %s',
+                              request.user.username,
+                              review_request.get_absolute_url())
 
         # Try using get_profile first, because it caches for future calls.
         # If it fails, it's okay. We don't rely upon it here.
