def get_object(self, queryset=None): """ Returns EDID versioned instance based on edid_pk and revision_pk. Injects timings sets as attributes to EDID object. We can't use RelaltedManager to get versioned timings, instead we store timings in EDID object attributes. """ edid_pk = self.kwargs.get('edid_pk', None) revision_pk = self.kwargs.get('revision_pk', None) # Get version based on edid_pk and revision_pk or return 404. version = Version.objects.get_for_object_reference(EDID, edid_pk) \ .filter(revision__pk=revision_pk) try: version = version.get() except version.model.DoesNotExist: raise Http404() # Assign EDID instance to edid edid = EDID(**version.field_dict) # Flag EDID instance as revision edid.is_revision = True # Get set of all versions (related objects) in the revision revision_versions = version.revision.version_set.all() # Split timings by type standardtimings = [] detailedtimings = [] for related_version in revision_versions: if related_version.content_type.model_class() == StandardTiming: standardtimings.append(StandardTiming(**related_version. field_dict)) elif related_version.content_type.model_class() == DetailedTiming: detailedtimings.append(DetailedTiming(**related_version. field_dict)) edid.standardtimings = standardtimings edid.detailedtimings = detailedtimings # Return EDID instance return edid