django中的动态表

时间:2015-03-20 21:17:03

标签: python django

我是django / python的新手。我在我的老板给我的代码中有一个函数,它自2012年起每天创建一个新表,使用静态表作为模型。所以,我的问题是:如何使用静态表检索每日表的数据?类似的东西:

models.py

class report_2015_03_20(models.Model):
    name = models.CharField(max_length=50)
    class Meta:
        managed = False
        db_table = 'report_2015_03_20'

class report_2015_03_21(models.Model):
    name = models.CharField(max_length=50)
    class Meta:
        managed = False
        db_table = 'report_2015_03_20'

class report_2015_03_22(models.Model):
    name = models.CharField(max_length=50)
    class Meta:
        managed = False
        db_table = 'report_2015_03_20'

我需要参考传递元作为参数:

class report(models.Model):
    name = models.CharField(max_length=50)

    class Meta:
        db_table = 'report_x_x_x'

任何帮助或意识形态对我都很好。感谢

1 个答案:

答案 0 :(得分:0)

我不明白为什么这是必要的,不要认为这是一个好主意。但是, 是一个具有挑战性的问题,所以这里是如何执行此操作(使用type动态创建类):

import datetime
from datetime import timedelta
from django.db import models
import __main__

# http://stackoverflow.com/questions/1060279/iterating-through-a-range-of-dates-in-python

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

class_list = []
for each_date in daterange(datetime.date(2012, 1, 1), datetime.date.today()):
    date_string = each_date.strftime('%Y_%m_%d')
    setattr(__main__,
        'report_' + date_string,
        type('report_' + date_string, (), {'name': models.CharField(max_length=50), 'Meta': type('Meta', (), {'managed': False, 'db_table': 'report_' + date_string})})
        )