首页 > 其他分享 >Django动态创建表模型,并使用drf

Django动态创建表模型,并使用drf

时间:2023-11-07 10:12:24浏览次数:35  
标签:name models queryset 动态创建 Django table model 序列化 drf

序列化器

from rest_framework import serializers

class MySerializer(serializers.ModelSerializer):
    """
    序列化器
    """

    class Meta:
        model = None # 可以设置为None,动态生成之后,再通过反射来重新设置。
        fields = '__all__'

视图类

from django.db import (
    models
)

from rest_framework.viewsets import (
    ModelViewSet
)

# 导入序列化器
from .serializers import (
    MySerializer
)


class MyView(ModelViewSet):
    """
    表信息具体数据
    """

    queryset = None
    serializer_class = MySerializer

    # 过滤类
    filter_backends = [SearchFilter, OrderingFilter]

    def dispatch(self, request, *args, **kwargs):

        # 获取表名,我是放在了路由的后面
        table_name = request.GET.get('table_name')

        if not table_name:
            raise Exception('缺少必要参数')

        # 表模型字典
        models_dic = {
            '__module__': 'myapp.models',
            'Meta':type('Meat',(),{
                'db_table':'{}'.format(table_name) # 指定数据库的表名
            })
        }
        
        # 动态获取表都有哪些信息。我把这些表的字段和类型存在了数据库。
        # 比如说我在表里面保存了 { field : name , type : CharField }
        table_info_queryset = TableInfo.objects.all()
        
        for _queryset in table_info_queryset:
            models_dic.update({
                _query.field: getattr(models, _query.type)(max_length=255)
            })
        
        # 生成模型表
        orm_model = type('TempModel', (models.Model,), models_dic)
        
        # 获取模型表数据
        orm_queryset = orm_model.objects.all()

        # 获取序列化器的Meta 
        _meta = getattr(self.serializer_class, 'Meta')

        # 通过反射,给序列化器的Meta的model重新设置为我们临时生成的model模型表
        setattr(_meta, 'model', orm_model)

        # 为当前视图重新设置我们临时生成的model模型表
        setattr(self, 'queryset', orm_queryset)

        # 下面两个是给搜索和排序重新设置
        setattr(self, 'search_fields', search_fields)
        setattr(self, 'ordering_fields', ordering_fields)
        
        return super().dispatch(request, *args, **kwargs)

标签:name,models,queryset,动态创建,Django,table,model,序列化,drf
From: https://www.cnblogs.com/BaiJiaZhengMing/p/17814407.html

相关文章

  • Django查询之—— Q查询
    Q查询 作用:filter的字段筛选条件指定多个,默认是and连接.要实现or或者not需要借助Q查询首先要导入模块fromdjango.db.modelsimportQQ(字段__条件=值) 连接条件:andornot#and的3种情况1.filter中指定多个参数逗号隔开:filter(参数1,参数2)......
  • Django查询之—— F查询
    F查询 作用:能够帮助你直接获取到表中某个字段对应的数据首先要导入模块fromdjango.db.modelsimportF 用法一:查询卖出数大于库存数的书籍res=models.Book.objects.filter(sale__gt=F('stock'))print(res)用法二:将所有书籍的价格提升500块res=mode......
  • django+爬虫+钉钉机器人
    Views类urls类Html结果......
  • Django实战项目-学习任务系统-配置定时调度任务
    接着上期代码内容,继续完善优化系统功能。 本次增加配置定时调度任务功能,学习任务系统定时任务管理添加的定时学习任务,需要通过配置调度任务,定时发布周期性的学习任务。以及每天定时发送学生用户属性值,积分值等信息到学生用户知晓。以及其他需要定时调度的任务都可以配置到定时......
  • 饮冰三年-人工智能-Django淘宝拾遗-86- Django Debug Toolbar调试工具
       在开发Django应用程序时,调试是不可或缺的一部分。DjangoDebugToolbar是一个强大的调试工具,可以帮助开发者深入了解应用程序的性能和执行细节。本文将介绍DjangoDebugToolbar的安装步骤以及如何在Django应用程序中使用该工具。项目使用的是github上开源的项目......
  • Django 表单处理:从前端到后台的全流程指南
    Django作为一个高级PythonWeb框架,它的表单处理能力强大,可以有效地处理用户输入,进行数据验证以及错误处理。本文将详细介绍如何在Django中创建、处理和使用表单。1.Django表单系统的核心Django的表单系统处理表单的生命周期,涉及以下核心部分:表单类:定义表单的结构和行为。验......
  • 【django框架】共4大模块50页md学习文档 第3篇:django路由和网络请求使用详解
    当你考虑开发现代化、高效且可扩展的网站和Web应用时,Django是一个强大的选择。Django是一个流行的开源PythonWeb框架,它提供了一个坚实的基础,帮助开发者快速构建功能丰富且高度定制的Web应用全套Django笔记直接地址:请移步这里共10章,31子模块,总计2w余字路由配置学习目......
  • 音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
    一、介绍音乐推荐与管理系统。本系统采用Python作为主要开发语言,前端使用HTML、CSS、BootStrap等技术搭建界面平台,后端使用Django框架处理请求,并基于Ajax等技术实现前端与后端的数据通信。在音乐个性推荐功能模块中采用通过Python编写协同过滤推荐算法模块,实现对当前登录用户的个性......
  • 音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
    一、介绍音乐推荐与管理系统。本系统采用Python作为主要开发语言,前端使用HTML、CSS、BootStrap等技术搭建界面平台,后端使用Django框架处理请求,并基于Ajax等技术实现前端与后端的数据通信。在音乐个性推荐功能模块中采用通过Python编写协同过滤推荐算法模块,实现对当前登录用户的个......
  • 【django开发】知识经验总结共50页md文档。今日分享:django项目搭建
    Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原......