Well, we could add another metadata field to the `File` or `Version`, but it seems unnecessary given that the data is already in the review log. I suppose `all_activity` could be somewhat expensive for a version with thousands of user reviews, but in general there should only be a few rows, so it should be quite cheap. If it worries you, we could go with something like:

```diff
--- a/apps/versions/models.py
+++ b/apps/versions/models.py
@@ -206,10 +206,12 @@ class Version(amo.models.ModelBase):
 
     @amo.cached_property(writable=True)
     def all_activity(self):
+        return self.all_activity_query.select_related(depth=1).no_cache()
+
+    @property
+    def all_activity_query(self):
         from devhub.models import VersionLog  # yucky
-        al = (VersionLog.objects.filter(version=self.id).order_by('created')
-              .select_related(depth=1).no_cache())
-        return al
+        return VersionLog.objects.filter(version=self.id).order_by('created')
 
     @amo.cached_property(writable=True)
     def compatible_apps(self):
@@ -240,9 +242,10 @@ class Version(amo.models.ModelBase):
     @amo.cached_property
     def failed_full_review(self):
         return any(a.activity_log.details.get('reviewtype') == 'nominated'
-                   for a in self.all_activity
-                   if a.activity_log.log in (amo.LOG.REJECT_VERSION,
-                                             amo.LOG.PRELIMINARY_VERSION))
+                   for a in (self.all_activity_query
+                                 .filter(activity_log__action__in=(
+                                    amo.LOG.REJECT_VERSION.id,
+                                    amo.LOG.PRELIMINARY_VERSION.id))))
 
     @amo.cached_property
     def is_compatible(self):
```