首页 > 解决方案 > 在 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
    }
}  

谢谢!

我提到的示例 API: https ://developer.shotgridsoftware.com/python-api/reference.html#shotgun_api3.shotgun.Shotgun.schema_field_read

** 编辑 **

我能够创建自己的自定义视图集来执行此操作,我让其他视图集继承。很高兴知道 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 端点在使用其余框架路由器时会自动显示。

标签: djangodjango-modelsdjango-rest-framework

解决方案


推荐阅读