コード例 #1
0
        def get_queryset(self):
            if hasattr(self.instance, "detail_history"):
                from cyano.models import Revision

                #print "m2m history"

                try:
                    return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
                except (AttributeError, KeyError):
                    db = self._db or router.db_for_read(self.instance.__class__, instance=self.instance)

                    ct_id = ContentType.objects.get_for_model(self.model).pk

                    queryset = Manager.get_queryset(self).using(db)._next_is_sticky().all()#.filter(**self.core_filters)

                    revision = Revision.objects.filter(
                        object_id__in=queryset,
                        content_type__pk=ct_id,
                        detail_id__lte=self.instance.detail_history).order_by("-detail").first()

                    data = []

                    if revision is not None:
                        new_data = json.loads(revision.new_data)
                        if self.prefetch_cache_name in new_data:
                            data = new_data[self.prefetch_cache_name]

                    ##print "History:", self.instance.detail_history, "Data:", data

                    queryset = queryset.filter(pk__in=data)

                    for item in queryset:
                        setattr(item, "detail_history", self.instance.detail_history)

                    #queryset = queryset.filter(pk__in = vals)
                    
                    ##print "Queryset:", queryset#, self.core_filters, self.target_field_name, self.source_field_name, self._fk_val
                    
                    return queryset
            else:
                queryset = super(HistoryManyRelatedManager, self).get_queryset()

            #print queryset
            return queryset