django - 在 Django Rest Framework 中获取模式和选项
问题描述
在用于管理视觉效果和动画行业的生产数据的特定 API 中,python API 中有一个调用来获取实体(基本上是模型)的可用字段。我正在考虑尝试从我的 Rest API 中获取相同的东西,以使用正确的字段类型向反应前端动态添加新属性或删除属性。
DRF 中是否已经存在类似的内容,或者我是否需要创建自定义视图来从模型上的元数据中获取这些数据?
示例响应可能类似于...
{model: {
field1: {
type: "charField",
choices: ["A", "B", "C"],
default: "A",
required: True
},
field2: {
type: "boolField",
default: True,
required: False
}
}
谢谢!
** 编辑 **
我能够创建自己的自定义视图集来执行此操作,我让其他视图集继承。很高兴知道 DRF 是否已经有类似的东西。
rest_views.py
class SchemaQueryViewset(viewsets.ModelViewSet):
@action(detail=False)
def schema(self, request):
serializer = self.serializer_class()
field_data = {}
for field_name, field_obj in serializer.fields.items():
field_data[field_name] = {
"field_type": str(field_obj).split("(")[0],
"read_only": field_obj.read_only,
"required": field_obj.required,
"label": field_obj.label
}
if hasattr(field_obj, "valid_formats"):
field_data[field_name]["valid_formats"] = field_obj.valid_formats
return Response(field_data)
class ProjectViewSet(SchemaQueryViewset):
serializer_class = ProjectSerializer
queryset = Project.objects.all()
无需更新 URL,/schema 端点在使用其余框架路由器时会自动显示。
解决方案
推荐阅读
- c - 如何在已安装系统的旁边安装最新的 glibc(2.29 版)并编译程序?
- c++ - C++:不能用 scoped_allocator_adaptor 传播 polymorphic_allocator
- javascript - 如何在不包含所有 php 文件的情况下使用 ajax 加载负载
- mysql - 怎么解决?ER_BAD_FIELD_ERROR:“字段列表”中的未知列“未定义”
- sql - Tableau 中的计算包含错误
- javascript - 使用 javascript 读取大型外部远程文件
- javascript - 为什么负数组索引比正数组索引慢得多?
- excel - 使用循环在 Word Doc VBA 中查找单词的问题
- javascript - 多个 onclick 事件 - 文本输出
- cordova - Cordova deeplinks issue with Ionic Tabbar