def like_toggle(request, content_type_id, object_id): content_type = get_object_or_404(ContentType, pk=content_type_id) if not _allowed(content_type.model_class()): return HttpResponseForbidden() like, created = Like.objects.get_or_create( sender=request.user, receiver_content_type=content_type, receiver_object_id=object_id ) if created: object_liked.send(sender=Like, like=like, request=request) else: like.delete() object_unliked.send(sender=Like, object=content_type.get_object_for_this_type(pk=object_id), request=request) if request.is_ajax(): return HttpResponse( json.dumps( { "likes_count": Like.objects.filter( receiver_content_type=content_type, receiver_object_id=object_id ).count(), "liked": created, } ), mimetype="application/json", ) return redirect(request.META["HTTP_REFERER"])
def likes(user, *models): content_types = [] model_list = models or LIKABLE_MODELS.keys() for model in model_list: if not _allowed(model): continue app, model = model.split(".") content_types.append( ContentType.objects.get(app_label=app, model__iexact=model) ) return Like.objects.filter(sender=user, receiver_content_type__in=content_types)
def likes(user, *models): content_types = [] model_list = models or LIKABLE_MODELS.keys() for model in model_list: if not _allowed(model): continue app, model = model.split(".") content_types.append( ContentType.objects.get(app_label=app, model__iexact=model)) return Like.objects.filter(sender=user, receiver_content_type__in=content_types)
def render(self, context): user = self.user.resolve(context) content_types = [] for raw_model_name in self.model_list: try: model_name = raw_model_name.resolve(context) except template.VariableDoesNotExist: continue if not _allowed(model_name): continue app, model = model_name.split(".") content_type = ContentType.objects.get(app_label=app, model__iexact=model) content_types.append(content_type) context[self.varname] = Like.objects.filter( sender=user, receiver_content_type__in=content_types) return ""
def render(self, context): user = self.user.resolve(context) content_types = [] for raw_model_name in self.model_list: try: model_name = raw_model_name.resolve(context) except template.VariableDoesNotExist: continue if not _allowed(model_name): continue app, model = model_name.split(".") content_type = ContentType.objects.get(app_label=app, model__iexact=model) content_types.append(content_type) context[self.varname] = Like.objects.filter( sender=user, receiver_content_type__in=content_types ) return ""
def is_allowed(self, obj): return _allowed(obj)