예제 #1
0
파일: views.py 프로젝트: timvideos/edid.tv
    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