![](/img/trans.png)
[英]django - how to get model objects from another process instead of database
[英]DJANGO: How to Render swagger-codegen model objects instead of database model object
我有一個現有的 Django 項目,我試圖在其中分離現有 webapp 的后端和前端。 這個想法是將后端功能公開為 rest api,然后還構建一個 Web 應用程序,允許用戶以圖形方式與 api 功能進行交互。 api 公開了一個 swagger/openapi 文檔,我使用 swagger 代碼生成來生成一個與之交互的客戶端。
作為概念證明,我正在嘗試重新實現一個直接使用數據庫 object 的視圖和調用 api 來執行相同功能的視圖
這是原始視圖
def load_mapping_metadata_only_operations(request):
mapping_operation_list = MappingOperation.objects.using('metadata')
print(mapping_operation_list[1])
context = {
'mapping_operation_list': mapping_operation_list,
'transformation_list': [],
'source_table_list': [],
'destination_table_list': [],
}
x = render(request, 'migration_core/migation_tool.html', context)
print(x.content)
return x
這是我現在試圖替換它的觀點。
def load_mapping_metadata_only_operations(request):
try:
mapping_operation_response = api_instance.find_models_by_name()
except ApiException as e:
print("Exception when calling MappingApi->find_models_by_name: %s\n" % e)
print(mapping_operation_response[1])
api_response_dict =
context = {
'mapping_operation_list': mapping_operation_response,
'transformation_list': [],
'source_table_list': [],
'destination_table_list': [],
}
x = render(request, 'migration_core/migation_tool.html', context)
print(x.content)
return x
這是列表發送到的模板:
<li class="nav-item">
<select class="selectpicker mr-sm-2" data-width="fit" data-live-search="true" title="MappingOperations" onchange="location = this.value">
{% if mapping_operation_list %}
{% for mapping_operation in mapping_operation_list.all %}
<option value="{% url 'load_mapping_metadata_by_operation' mapping_operation.id %}"
{% if mapping_operation_id %}
so, in the old situation the mapping_operation_list is a QuerySet and that renders just fine, in the new situation, the mapping_operation_response is a list of MappingOperation object, these objects are not the same class as the model used by the original view, they are object使用 swagger-codegen 生成的 class。 class 確實具有名稱屬性 This object 未呈現,根本沒有顯示任何數據。
幾個打印語句向我證實,數據實際上是在新情況下檢索的,所以這不是問題,模板只是不會呈現結果。
我不明白為什么,這個模板在發送到模板之前應該關心數據在什么 class 中。 我想我錯過了一些關於 Django 的東西,導致數據無法發送。
是否可以渲染不屬於 django 使用的 model 的對象? 特別是 swagger-codegen 生成的對象? 這樣做的最佳方法是什么,我應該從這些對象創建一個字典嗎?
同時我發現了問題,我的模板 use.all (我認為這只是模板語言來獲取集合/列表中的所有項目)。 事實證明,它是特定於 QuerySet 的方法
刪除.all in
{% for mapping_operation in mapping_operation_list.all %}
將顯示數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.