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)