繁体   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