|
3 | 3 |
|
4 | 4 | from django.db import models
|
5 | 5 | from django.utils.translation import ugettext_lazy as _
|
6 |
| -from elasticsearch_dsl import GeoPoint, MetaField |
| 6 | +from elasticsearch_dsl import GeoPoint, MetaField, InnerDoc |
7 | 7 | from mock import patch, Mock, PropertyMock
|
8 | 8 |
|
9 | 9 | from django_elasticsearch_dsl import fields
|
@@ -173,6 +173,43 @@ def test_prepare(self):
|
173 | 173 | }
|
174 | 174 | )
|
175 | 175 |
|
| 176 | + def test_innerdoc_prepare(self): |
| 177 | + class ManufacturerInnerDoc(InnerDoc): |
| 178 | + name = fields.TextField() |
| 179 | + location = fields.TextField() |
| 180 | + |
| 181 | + def prepare_location(self, instance): |
| 182 | + return "USA" |
| 183 | + |
| 184 | + @registry.register_document |
| 185 | + class CarDocumentWithInnerDoc(DocType): |
| 186 | + manufacturer = fields.ObjectField(doc_class=ManufacturerInnerDoc) |
| 187 | + |
| 188 | + class Django: |
| 189 | + model = Car |
| 190 | + fields = ['name', 'price'] |
| 191 | + |
| 192 | + class Index: |
| 193 | + name = 'car_index' |
| 194 | + |
| 195 | + manufacturer = Manufacturer( |
| 196 | + name="Bugatti", |
| 197 | + ) |
| 198 | + |
| 199 | + car = Car(name="Type 57", price=5400000.0, manufacturer=manufacturer) |
| 200 | + doc = CarDocumentWithInnerDoc() |
| 201 | + prepared_data = doc.prepare(car) |
| 202 | + self.assertEqual( |
| 203 | + prepared_data, { |
| 204 | + 'name': car.name, |
| 205 | + 'price': car.price, |
| 206 | + 'manufacturer': { |
| 207 | + 'name': car.manufacturer.name, |
| 208 | + 'location': ManufacturerInnerDoc().prepare_location(manufacturer) |
| 209 | + } |
| 210 | + } |
| 211 | + ) |
| 212 | + |
176 | 213 | def test_prepare_ignore_dsl_base_field(self):
|
177 | 214 | @registry.register_document
|
178 | 215 | class CarDocumentDSlBaseField(DocType):
|
|
0 commit comments