zoukankan      html  css  js  c++  java
  • Djangoorm的多表建立与queryset对象的合并

    使用这个方法的前提是:我们用Django的orm和REST来实现的

       数据库提前建好了,而且表中字段相同,但是表名是不一样.需要动态在model中建表。我们使用Book_来模拟实现的

    from django.db import models
    import sys
    class Book_1(models.Model):
        name = models.CharField(max_length=32)
    
        class Meta:
            db_table = 'book_1'
    import sys
    #动态生成类用type
    for i in range(2,4):
        #meta是指定数据库的名字
        class Meta:
            db_table = 'book_' + str(i)
    
        dd = {
            'name': models.CharField(max_length=32),#这是生成类里面的参数
            '__module__': Book_1.__module__,#这个目前不在确定
            'Meta': Meta,#这是meta参数
              }
    
        c_name = 'Book_' + str(i)#这是生成类的名字
        print('sys_modules',sys.modules[__name__])
    
        setattr(sys.modules[__name__], c_name, type(c_name, (models.Model,), dd))#这是设置类的名字

    在试图中的函数:目前里面没有序列化数据,直接返回的,如果是queryset对象是同一个model用|来连接。如果不是就用下面的方法。

    from django.shortcuts import render,HttpResponse
    from app01 import models
    # class Bookserializer()
    
    def test1(request):
        queryset_l = []
        for i in range(1, 4):
            queryset_l.extend(getattr(models, 'Book_' + str(i)).objects.all())#这个是用的是extend方法,如果我们要用REST序列化的话,就用这个方法
            queryset_l.append(getattr(models, 'Book_' + str(i)).objects.all())#这个是方法与下面的chain方法配合使用,
    
        data = (queryset_l)
        # data = (chain(*queryset_l))#这个方法获取的数据不是queryset对象了
        print('data',data)
        data=list(data)
        for x in data:
            print(x.name)
        return HttpResponse(x)
  • 相关阅读:
    两个Stirng[]拼接成一个数组
    Visual code 常用快捷键
    mysql 中的分页limit
    移动端web轮播图插件swiper,功能很强大
    array_splice()函数 ,删除数组中的某个值
    Github简单的上传和修改
    PHP数组在循环的时候修改本身的值
    IP定位,天气接口
    使用百度翻译的API接口
    laravel 队列
  • 原文地址:https://www.cnblogs.com/1a2a/p/8694023.html
Copyright © 2011-2022 走看看