Skip to content

Commit bb49df2

Browse files
Merge pull request #153 from CorrosiveKid/id-lookup-testcase
Add example and test case to cover custom lookup field scenario
2 parents 9acc706 + d2cd834 commit bb49df2

File tree

11 files changed

+104
-0
lines changed

11 files changed

+104
-0
lines changed

examples/simple/factories/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
from .books_order import *
1010
from .books_orderline import *
1111
from .books_publisher import *
12+
from .books_tag import *

examples/simple/search_indexes/documents/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
from .city import CityDocument
55
from .publisher import PublisherDocument
66
from .location import LocationDocument
7+
from .tag import TagDocument
78

89
__all___ = (
910
'AddressDocument',
1011
'AuthorDocument',
1112
'BookDocument',
1213
'CityDocument',
1314
'PublisherDocument',
15+
'TagDocument',
1416
)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from django.conf import settings
2+
from django_elasticsearch_dsl import Document, Index, fields
3+
4+
from books.models import Tag
5+
from .analyzers import html_strip
6+
7+
8+
__all__ = ('TagDocument',)
9+
10+
INDEX = Index(settings.ELASTICSEARCH_INDEX_NAMES[__name__])
11+
12+
INDEX.settings(
13+
number_of_shards=1,
14+
number_of_replicas=1,
15+
blocks={'read_only_allow_delete': None}
16+
)
17+
18+
19+
@INDEX.doc_type
20+
class TagDocument(Document):
21+
"""Elasticsearch document for a Tag."""
22+
23+
# Set unique title as the document id.
24+
id = fields.KeywordField(attr='title')
25+
title = fields.KeywordField()
26+
27+
class Django(object):
28+
"""Django Elasticsearch DSL ORM Meta."""
29+
30+
model = Tag
31+
32+
class Meta(object):
33+
"""Meta options."""
34+
35+
parellel_indexing = True

examples/simple/search_indexes/serializers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
PublisherDocumentSerializer,
1111
PublisherDocumentSimpleSerializer,
1212
)
13+
from .tag import TagDocumentSerializer
1314

1415
__all__ = (
1516
'AddressDocumentSerializer',
@@ -21,4 +22,5 @@
2122
'LocationDocumentSerializer',
2223
'PublisherDocumentSerializer',
2324
'PublisherDocumentSimpleSerializer',
25+
'TagDocumentSerializer',
2426
)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from django_elasticsearch_dsl_drf.serializers import DocumentSerializer
2+
3+
from ..documents import TagDocument
4+
5+
6+
__all__ = ('TagDocumentSerializer',)
7+
8+
9+
class TagDocumentSerializer(DocumentSerializer):
10+
"""Serializer for a Tag document."""
11+
12+
class Meta(object):
13+
"""Meta options."""
14+
15+
document = TagDocument
16+
fields = (
17+
'id',
18+
'title',
19+
)

examples/simple/search_indexes/urls.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
LocationDocumentViewSet,
2727
PublisherDocumentViewSet,
2828
FrontAddressDocumentViewSet,
29+
TagDocumentViewSet,
2930
)
3031

3132
__all__ = ('urlpatterns',)
@@ -203,6 +204,16 @@
203204
basename='publisherdocument'
204205
)
205206

207+
# *********************************************************
208+
# ************************* Tags **************************
209+
# *********************************************************
210+
211+
router.register(
212+
r'tags',
213+
TagDocumentViewSet,
214+
basename='tagdocument'
215+
)
216+
206217
# **********************************************************
207218
# ********************** URL patterns **********************
208219
# **********************************************************

examples/simple/search_indexes/viewsets/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from .city import CityDocumentViewSet, CityCompoundSearchBackendDocumentViewSet
2424
from .location import LocationDocumentViewSet
2525
from .publisher import PublisherDocumentViewSet
26+
from .tag import TagDocumentViewSet
2627

2728
__all__ = (
2829
'AddressDocumentViewSet',
@@ -50,4 +51,5 @@
5051
'LocationDocumentViewSet',
5152
'PublisherDocumentViewSet',
5253
'FrontAddressDocumentViewSet',
54+
'TagDocumentViewSet',
5355
)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from django_elasticsearch_dsl_drf.pagination import LimitOffsetPagination
2+
from django_elasticsearch_dsl_drf.viewsets import DocumentViewSet
3+
4+
from ..documents import TagDocument
5+
from ..serializers import TagDocumentSerializer
6+
7+
__all__ = (
8+
'TagDocumentViewSet',
9+
)
10+
11+
12+
class TagDocumentViewSet(DocumentViewSet):
13+
"""Document viewset for tags."""
14+
15+
document = TagDocument
16+
serializer_class = TagDocumentSerializer
17+
lookup_field = 'title'
18+
filter_backends = []
19+
pagination_class = LimitOffsetPagination

examples/simple/settings/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@
279279
'search_indexes.documents.address': 'address',
280280
'search_indexes.documents.author': 'author',
281281
'search_indexes.documents.book': 'book',
282+
'search_indexes.documents.tag': 'tag',
282283
'search_indexes.documents.city': 'city',
283284
'search_indexes.documents.publisher': 'publisher',
284285
'search_indexes.documents.location': 'location',

examples/simple/settings/testing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
'search_indexes.documents.address': 'test_address',
1818
'search_indexes.documents.author': 'test_author',
1919
'search_indexes.documents.book': 'test_book',
20+
'search_indexes.documents.tag': 'test_tag',
2021
'search_indexes.documents.city': 'test_city',
2122
'search_indexes.documents.publisher': 'test_publisher',
2223
'search_indexes.documents.location': 'test_location',

0 commit comments

Comments
 (0)