Skip to content

Commit c8b601b

Browse files
committed
All backends: fixed more_like_this & deferreds
Django removed the get_proxied_model helper function in the 1.3 dev cycle: https://code.djangoproject.com/ticket/17678 This change adds support for the simple new property access used by 1.3+ BACKWARD INCOMPATIBLE: Django 1.2 is no longer supported
1 parent 13e5a49 commit c8b601b

File tree

5 files changed

+14
-32
lines changed

5 files changed

+14
-32
lines changed

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Requirements
4343
Haystack has a relatively easily-met set of requirements.
4444

4545
* Python 2.5+
46-
* Django 1.2+
46+
* Django 1.3+
4747

4848
Additionally, each backend has its own requirements. You should refer to
4949
http://docs.haystacksearch.org/dev/installing_search_engines.html for more

docs/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ Requirements
109109
Haystack has a relatively easily-met set of requirements.
110110

111111
* Python 2.5+
112-
* Django 1.2+ (may work on 1.1.2+)
112+
* Django 1.3+
113113

114114
Additionally, each backend has its own requirements. You should refer to
115115
:doc:`installing_search_engines` for more details.

haystack/backends/elasticsearch_backend.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,7 @@
1111
from haystack.models import SearchResult
1212
from haystack.utils import get_identifier
1313
from haystack.utils import log as logging
14-
try:
15-
from django.db.models.sql.query import get_proxied_model
16-
except ImportError:
17-
# Likely on Django 1.0
18-
get_proxied_model = None
14+
1915
try:
2016
import requests
2117
except ImportError:
@@ -504,11 +500,9 @@ def more_like_this(self, model_instance, additional_query_string=None,
504500
if not self.setup_complete:
505501
self.setup()
506502

507-
# Handle deferred models.
508-
if get_proxied_model and hasattr(model_instance, '_deferred') and model_instance._deferred:
509-
model_klass = get_proxied_model(model_instance._meta)
510-
else:
511-
model_klass = type(model_instance)
503+
# Deferred models will have a different class ("RealClass_Deferred_fieldname")
504+
# which won't be in our registry:
505+
model_klass = model_instance._meta.concrete_model
512506

513507
index = connections[self.connection_alias].get_unified_index().get_index(model_klass)
514508
field_name = index.get_content_field()

haystack/backends/solr_backend.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@
99
from haystack.models import SearchResult
1010
from haystack.utils import get_identifier
1111
from haystack.utils import log as logging
12-
try:
13-
from django.db.models.sql.query import get_proxied_model
14-
except ImportError:
15-
# Likely on Django 1.0
16-
get_proxied_model = None
12+
1713
try:
1814
from pysolr import Solr, SolrError
1915
except ImportError:
@@ -264,11 +260,9 @@ def more_like_this(self, model_instance, additional_query_string=None,
264260
limit_to_registered_models=None, result_class=None, **kwargs):
265261
from haystack import connections
266262

267-
# Handle deferred models.
268-
if get_proxied_model and hasattr(model_instance, '_deferred') and model_instance._deferred:
269-
model_klass = get_proxied_model(model_instance._meta)
270-
else:
271-
model_klass = type(model_instance)
263+
# Deferred models will have a different class ("RealClass_Deferred_fieldname")
264+
# which won't be in our registry:
265+
model_klass = model_instance._meta.concrete_model
272266

273267
index = connections[self.connection_alias].get_unified_index().get_index(model_klass)
274268
field_name = index.get_content_field()

haystack/backends/whoosh_backend.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,14 @@
1515
from haystack.models import SearchResult
1616
from haystack.utils import get_identifier
1717
from haystack.utils import log as logging
18+
1819
try:
1920
import json
2021
except ImportError:
2122
try:
2223
import simplejson as json
2324
except ImportError:
2425
from django.utils import simplejson as json
25-
try:
26-
from django.db.models.sql.query import get_proxied_model
27-
except ImportError:
28-
# Likely on Django 1.0
29-
get_proxied_model = None
3026

3127
try:
3228
import whoosh
@@ -448,11 +444,9 @@ def more_like_this(self, model_instance, additional_query_string=None,
448444
if not self.setup_complete:
449445
self.setup()
450446

451-
# Handle deferred models.
452-
if get_proxied_model and hasattr(model_instance, '_deferred') and model_instance._deferred:
453-
model_klass = get_proxied_model(model_instance._meta)
454-
else:
455-
model_klass = type(model_instance)
447+
# Deferred models will have a different class ("RealClass_Deferred_fieldname")
448+
# which won't be in our registry:
449+
model_klass = model_instance._meta.concrete_model
456450

457451
field_name = self.content_field_name
458452
narrow_queries = set()

0 commit comments

Comments
 (0)