我正在使用elasticsearch_dsl库,但这个问题广泛适用于python。
我想定义一个创建名为test__YYYY-MM-DD
class Test(DocType):
content = Text()
class Meta:
index = 'test'
@classmethod
def create_index(cls):
now = datetime.datetime.utcnow().strftime('%Y-%m-%d')
test = Index('{}__{}'.format(cls.Meta.index, now))
^^^ this does not exist
test.doc_type(cls)
test.create()
如何访问位于index
内部课程的Meta
字段?
答案 0 :(得分:3)
我正在使用
elasticsearch_dsl
库,但这个问题广泛适用于Python。
实际上,它并不广泛适用于Python。在普通课程中,访问cls.Meta.index
只会照常工作。 DocType
has a metaclass removes Meta
from the class namespace。如果我正确阅读了源代码,那么您应该在cls._doc_type.index
处找到您要查找的属性。
>>> class Example(DocType):
... class Inner:
... index = 'inner_var'
... class Meta:
... index = 'meta_var'
... @classmethod
... def foo(cls):
... print(cls.Inner.index)
... print(cls._doc_type.index)
...
>>> Example.foo()
inner_var
meta_var
注意: DocTypeOptions
实例中存在一个前导下划线,即_doc_type
,表示私有API。也许您应该寻找一个公共API来代替创建索引。