Skip to content

Commit

Permalink
Adding support for Django 1.2 - verified with versions 1.1.X and 1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
coleifer committed Jun 3, 2010
1 parent f156ddb commit 85b3413
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions ratings/utils.py
@@ -1,5 +1,6 @@
from math import sqrt

import django
from django.contrib.auth.models import User
from django.contrib.contenttypes.generic import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
Expand All @@ -15,6 +16,19 @@ def get_content_object_field(rating_model):
def is_gfk(content_field):
return isinstance(content_field, GenericForeignKey)

def query_has_where(query):
if django.VERSION < (1, 2):
return query.where.as_sql()[0] is None
else:
qn = connection.ops.quote_name
return query.where.as_sql(qn, connection)[0] is None

def query_as_sql(query):
if django.VERSION < (1, 2):
return query.as_sql()
else:
return query.get_compiler(connection=connection).as_sql()

def sim_euclidean_distance(ratings_queryset, factor_a, factor_b):
rating_model = ratings_queryset.model

Expand Down Expand Up @@ -43,10 +57,11 @@ def sim_euclidean_distance(ratings_queryset, factor_a, factor_b):
"""

rating_query = ratings_queryset.values_list('pk').query
if rating_query.where.as_sql()[0] is None:
if query_has_where(rating_query):
queryset_filter = ''
else:
rating_qs_sql = rating_query.as_sql()[0] % rating_query.as_sql()[1]
q, p = query_as_sql(rating_query)
rating_qs_sql = q % p
queryset_filter = ' AND r1.id IN (%s)' % rating_qs_sql

params = {
Expand All @@ -72,6 +87,7 @@ def sim_euclidean_distance(ratings_queryset, factor_a, factor_b):

def sim_pearson_correlation(ratings_queryset, factor_a, factor_b):
rating_model = ratings_queryset.model
qn = connection.ops.quote_name

if isinstance(factor_a, User):
filter_field = 'user_id'
Expand Down Expand Up @@ -104,10 +120,11 @@ def sim_pearson_correlation(ratings_queryset, factor_a, factor_b):
"""

rating_query = ratings_queryset.values_list('pk').query
if rating_query.where.as_sql()[0] is None:
if query_has_where(rating_query):
queryset_filter = ''
else:
rating_qs_sql = rating_query.as_sql()[0] % rating_query.as_sql()[1]
q, p = query_as_sql(rating_query)
rating_qs_sql = q % p
queryset_filter = ' AND r1.id IN (%s)' % rating_qs_sql

params = {
Expand Down

0 comments on commit 85b3413

Please sign in to comment.