Source code for recommends.storages.djangoorm.managers

from django.conf import settings
from django.db import models
from recommends.managers import CachedContentTypesMixin


[docs]class RecommendsManager(models.Manager, CachedContentTypesMixin):
[docs] def filter_for_model(self, model): ctype_id = self.get_ctype_id_for_obj(model) return self.filter(object_ctype=ctype_id)
[docs] def filter_for_object(self, obj): return self.filter_for_model(obj).filter(object_id=obj.id)
[docs]class SimilarityManager(RecommendsManager):
[docs] def filter_by_couple(self, target_object, related_obj): related_ctype_id = self.get_ctype_id_for_obj(related_obj) return self.filter_for_object(target_object).filter( related_object_ctype=related_ctype_id, related_object_id=related_obj.id )
[docs] def get_queryset(self): return super(SimilarityManager, self).get_queryset().filter(score__isnull=False)
[docs] def get_or_create_for_objects(self, object_target, object_target_site, object_related, object_related_site): object_ctype_id = self.get_ctype_id_for_obj(object_target) object_id = object_target.id related_object_ctype_id = self.get_ctype_id_for_obj(object_related) related_object_id = object_related.id return self.get_or_create( object_ctype_id=object_ctype_id, object_id=object_id, object_site=object_target_site.id, related_object_ctype_id=related_object_ctype_id, related_object_id=related_object_id, related_object_site=object_related_site.id )
[docs] def set_score_for_objects(self, object_target, object_target_site, object_related, object_related_site, score): if score == 0: self.filter_by_couple(object_target, object_related).filter( object_site=object_target_site.id, related_object_site=object_related_site.id ).delete() return None result, created = self.get_or_create_for_objects(object_target, object_target_site, object_related, object_related_site) result.score = score result.save() return result
[docs] def similar_to(self, obj, site=None, **kwargs): if site is None and 'related_object_site' not in kwargs: kwargs['related_object_site'] = settings.SITE_ID return self.filter_for_object(obj).filter(**kwargs)
[docs]class RecommendationManager(RecommendsManager):
[docs] def get_queryset(self): return super(RecommendationManager, self).get_queryset().filter(score__isnull=False)
[docs] def get_or_create_for_object(self, user, object_recommended, object_site): object_ctype_id = self.get_ctype_id_for_obj(object_recommended) object_id = object_recommended.id return self.get_or_create( object_ctype_id=object_ctype_id, object_id=object_id, object_site=object_site.id, user=user.id )
[docs] def set_score_for_object(self, user, object_recommended, object_site, score): if score == 0: self.filter_for_object(object_recommended).filter(user=user.id).delete() return None result, created = self.get_or_create_for_object(user, object_recommended, object_site) result.score = score result.save() return result