python - DJANGO:如何渲染 swagger-codegen 模型对象而不是数据库模型对象
问题描述
我有一个现有的 Django 项目,我试图在其中分离现有 web 应用程序的后端和前端。这个想法是将后端功能公开为rest api,然后构建一个允许用户以图形方式与api功能交互的webapp。该 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,
'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 %}
因此,在旧情况下,mapping_operation_list 是一个 QuerySet 并且渲染得很好,在新情况下,mapping_operation_response 是 MappingOperation 对象的列表,这些对象与原始视图使用的模型不同的类,它们是对象使用 swagger-codegen 生成的类。该类确实具有名称属性此对象未呈现,根本没有显示任何数据。
几个打印语句向我证实,数据实际上是在新情况下检索的,所以这不是问题,模板只是不会呈现结果。
我不明白为什么,在将数据发送到模板之前,该模板不应该关心数据所在的类。我想我错过了一些关于 Django 的东西,导致数据不被发送。
是否可以渲染不属于 django 使用的模型的对象?特别是 swagger-codegen 生成的对象?这样做的最佳方法是什么,我应该从这些对象创建一个字典吗?
解决方案
同时我发现了问题,我的模板使用 .all (我认为这只是模板语言来获取集合/列表中的所有项目)。事实证明,它是特定于 QuerySet 的方法
删除 .all in
{% for mapping_operation in mapping_operation_list.all %}
将显示数据。
推荐阅读
- java - 清单合并失败 (AppIntro)
- python - 在抓取之前等待页面加载
- google-api - 在 Google 文档中打开图片
- python - while 循环中的错误与 try-except 相结合
- java - 执行正确的代码后,如何阻止我的代码执行每个 println?
- r - 如何根据元素ggplot r的值给出直方图中特定颜色的条形图
- java - 在springboot中获取存储库对象null
- c# - User checked item in CheckedListBox
- javascript - 将 javascript 变量插入到转义的 JSON 字符串中
- java - 每次出现的匹配条件