Djangoorm的多表建立与queryset对象的合并

时间:2023-03-08 20:28:15

使用这个方法的前提是:我们用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)