Django-elasticsearch-dsl NestedField не синхронизируется с базой данных

Я создал документ django-elasticsearch-dsl с NestedField, но по какой-то причине данные для этого NestedField не извлекаются из базы данных, хотя данные извлекаются из базовой модели. Маппинг для индекса также корректен, включая вложенное поле:

{
  "mappings": {
    "properties": {
      "addresses": {
        "type": "nested",
        "properties": {
          "pk": {
            "type": "integer"
          },
          "postal_code": {
            "type": "text"
          },
          "street_name": {
            "type": "text"
          },
          "street_no": {
            "type": "integer"
          }
        }
      },
      "country": {
        "type": "text"
      },
      "name": {
        "type": "text"
      }
    }
  }
}

Я сделал все в соответствии с официальными документами, я не знаю, что я упустил.

models.py

from django.db import models

# Create your models here.
class City(models.Model):
    name = models.CharField(max_length=100)
    country = models.CharField(max_length=100)

    def __str__(self):
        return f"{self.name}, {self.country}"


class Address(models.Model):
    city = models.ForeignKey(
        City, on_delete=models.CASCADE, related_name="related_city"
    )
    street_name = models.CharField(max_length=300)
    street_no = models.PositiveIntegerField()
    postal_code = models.CharField(max_length=6)

    def __str__(self):
        return f"{self.street_name} {self.street_no} ({self.city.name})"

documents.py

from django_elasticsearch_dsl import Document, fields
from django_elasticsearch_dsl.registries import registry
from .models import City, Address


@registry.register_document
class CityDocument(Document):
    addresses = fields.NestedField(
        properties={
            "street_name": fields.TextField(),
            "street_no": fields.IntegerField(),
            "postal_code": fields.TextField(),
            "pk": fields.IntegerField(),
        }
    )

    class Index:
        name = "cities"

    class Django:
        model = City
        fields = ["name", "country"]
        related_models = [Address]

    def get_queryset(self):
        return super().get_queryset().prefetch_related("addresses")

    def get_instances_from_related(self, related_instance):
        if isinstance(related_instance, Address):
            return related_instance.city

Попробуйте добавить .all()

def get_instances_from_related(self, related_instance):
    if isinstance(related_instance, Address):
        return related_instance.city.all()
Вернуться на верх