DJANGO:如何呈现 swagger-codegen 模型对象而不是数据库模型对象

问题描述

我有一个现有的 Django 项目,我试图在其中分离现有 Web 应用程序的后端和前端。这个想法是将后端功能公开为一个休息 api,然后还构建一个 web 应用程序,允许用户以图形方式与 api 功能交互。 该 api 公开了一个 swagger/openapi 文档,我使用了 swagger codegen 来生成一个客户端来与之交互。

作为概念证明,我试图重新实现一个直接使用数据库对象的视图,该视图调用 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,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 %}

所以,在旧情况下,mapping_operation_list 是一个 QuerySet 并且呈现得很好,在新情况下,mapping_operation_response 是一个 MappingOperation 对象列表,这些对象与原始视图使用的模型不同,它们是使用 swagger-codegen 生成的类的对象。该类确实具有 name 属性此对象未呈现,根本不显示任何数据。

一些打印语句向我确认数据实际上是在新情况下检索的,所以这不是问题,模板只是不会呈现结果。

我不明白为什么,在将数据发送到模板之前,这个模板没有任何东西应该关心数据在哪个类中。我想我遗漏了一些关于 Django 的内容,导致数据无法发送。

是否可以渲染不属于 django 使用的模型的一部分的对象?特别是swagger-codegen生成的对象?这样做的最佳方法是什么,我应该从这些对象创建一个 dict 吗?

解决方法

同时我发现了问题,我的模板使用 .all(我认为这只是模板语言,用于获取集合/列表中的所有项目)。原来它是一个特定于 QuerySet 的方法

删除 .all 中的

libFolder

将显示数据。