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)

 

posted on 2018-04-02 15:42  黎明NB  阅读(768)  评论(0编辑  收藏  举报

导航