簡體   English   中英

DJANGO:如何渲染 swagger-codegen model 對象而不是數據庫 model ZA8CFDE63931BD59EB26ACZ6

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM