Как я могу изменить _id для документа django elasticsearch dsl python

Для класса документа w я хочу изменить _id на slug или другой вариант

@registry.register_document
class TestDocument(Document):
id = fields.IntegerField(attr='id', multi=True)

name = fields.TextField(
    analyzer=html_strip,
    fields={
        'raw': fields.TextField(analyzer='keyword'),
    }
)

built_area = fields.TextField(
    analyzer=html_strip,
    fields={
        'raw': fields.TextField(analyzer='keyword'),
    }
)
living_area = fields.TextField(
    analyzer=html_strip,
    fields={
        'raw': fields.TextField(analyzer='keyword'),
    }
)

project = fields.ObjectField(properties={
    'name': fields.TextField(),
    'pk': fields.TextField(),
})

этот thread упоминает мета, но не не работает


person Hetdev    schedule 10.12.2020    source источник


Ответы (1)


правильный способ сделать это - использовать функцию документа generate_id

def generate_id(self, object_instance):
    return self.project.id

окончательный документ будет:

...
project = fields.ObjectField(properties={
    'name': fields.TextField(),
    'pk': fields.TextField(),
})

def generate_id(self, object_instance):
    return self.project.id

class Index:
    # Name of the Elasticsearch index
    name = 'typologies_test'
person Hetdev    schedule 10.12.2020