我正在生成一個DocType
類,以根據我的ORM構建映射和保存文檔。在Elasticsearch DSL中動態生成DocType
def get_doc_type(self):
attributes = {}
...
# Build attributes dictionary here
DT = type('DocType', (DocType,), attributes)
return DT
這看似工作正常,我沒有映射的麻煩。我的問題是當我試圖保存文件。
這不起作用
Doc = get_doc_type()
for instance in queryset:
doc = Doc()
for field_name in fields:
attribute = getattr(instance, field_name, None)
setattr(doc, field_name, attribute)
doc.save(index)
發生這種情況時,文檔確實得到保存,但是,沒有我的屬性被設置。它只是一個空文件。
我已調試代碼以確認field_name
和attribute
包含我期望的值。
這樣確實
Doc = self.get_doc_type()
for instance in queryset:
kwargs = {}
for field_name in fields:
attribute = getattr(instance, field_name, None)
kwargs.update({field_name: attribute})
doc = Doc(**kwargs)
doc.save(index=index)
當我使用這個策略,預期該文件被保存,所有的信息和attributes
已經從我的instance
傳遞到doc
。
問題
可能是什麼造成的?這對我來說沒有意義,爲什麼兩種策略都無效。
這基本上就是我所做的。我做了一個模型管理器作爲django管理器的子類(這是我的方法生成類的地方)。我試圖避免爲每個模型創建一個新類,而是隻能添加我的mixin。當不使用'type'來生成一個類時,它似乎工作正常。 –