出力時にデータの「キー」を変更する必要があります。数値の中にPythonキーの名前を動的に変更
これは、ジャンゴがこれを行うことができるかどうかわかりません。 FWIW、これは弾性検索に出力されます(関連性があるかどうかはわかりません)。
基本的には{"level":1 }
となりますが、代わりに{"level_1":1}
としたいと思います。
これはどのように達成できますか?
[
{
"title":"Test item",
"tag":[
{
"name":"Nope",
"level":1
},
{
"name":"Yep",
"level":2
}
],
}
]
を、私は結果を見てみたい方法:
[
{
"title":"Test item",
"tag":[
{
"name":"Nope",
"level_1":1
},
{
"name":"Yep",
"level_2":2
}
],
}
]
Search.py
ここに私の現在のコードは 結果がどのように見えるかclass Tag(models.Model):
name = models.CharField("Name", max_length=5000, blank=True)
level = models.IntegerField(null=True, blank=True)
class Entry(models.Model):
title = models.CharField("Title", max_length=10000, blank=True)
tag = models.ManyToManyField('Tag', blank=True)
def indexing(self):
obj = TaskIndex(
meta={'id': self.id},
title=self.title,
tag=list(self.tag.values('name').annotate(level=F('level_%)))
)
obj.save()
return obj.to_dict(include_meta=True)
です
class TaskIndex(DocType): title = String() class Meta: index = 'task-index' # Bulk indexing function, run in shell def bulk_indexing(): TaskIndex.init() es = Elasticsearch() bulk(client=es, actions=(b.indexing() for b in models.Task.objects.all().iterator())) # Simple search function def _search(title): s = Search().filter('term', title=title.text) response = s.execute() return response
のようないくつかのテストデータとそれを実行すると
return format_dict(obj.to_dict(include_meta=True))
は、少なくともこの作品あなたのコードでそれを使ってどのようにちょうど新しいの追加についてキーの名前を変更するのではなく、辞書のキー? –
私が使用しているsearchkitライブラリはkeynamesしか見ないので。 – Ycon