我有一组数据库表,每天每分钟存储客户订单数。一年中的每个月都是不同的表,以避免表过大。为了在我的Django网页中检索这些数据,我动态地创建一个模型类,根据从html表单输入接收的日期填充db_table。问题是,当我用一个新的日期值重新提交表单时,类没有更新为应该是新模型的内容,它仍然保持旧的值。在
我的模型.py看起来像这样:
class baseModel(models.Model):
id = models.CharField(max_length=40)
date = models.IntegerField()
minute = models.IntegerField()
totalorders = models.IntegerField()
class Meta:
abstract = True
managed = False
def getModel(type, yyyymm):
if type == 'duration':
class DurationClass(baseModel):
medianduration = models.IntegerField()
avgduration = models.IntegerField()
class Meta:
db_table='orderTable' + yyyymm
#debug statement
print db_table
return DurationClass
yyymm只是一个字符串,比如2012年4月的'201204'。因此,如果我在输入框中输入2012年4月,它可以正常工作,但如果我改为2012年3月,它仍然会查询4月的数据。我可以从debug语句中看到db\u表正在被正确更新,但由于某些原因它不能工作。在分配新的动态模型之前,是否需要取消分配旧的动态模型?在视图.py,我只是在做这个(不是循环):
^{pr2}$非常感谢你的任何想法。在
您只需要以下链接:https://code.djangoproject.com/wiki/DynamicModels
对于python如何管理动态类的创建有一个问题。我不知道python到底是如何工作的,但似乎您这样做的方式并不完全正确。我认为这是因为python类附加到一个模块上,所以第一次执行“getModel”时,它会按照您的预期创建模型。但是,在这之后,每次执行“getModel”时,由于类的名称始终相同,python无法在同一个模块中创建同一个类,因此它会以某种方式返回第一次调用“getModel”时创建的类。(我希望你能理解我的英语,尽管我可能对python动态类创建的工作原理有误解)
在给你答案之前,我做了一些测试。创建动态类的最佳方法似乎是使用“type”(python内置方法),因此可以为每个表创建一个类(这些类必须具有不同的名称)。在
下面是一个你能做的事情的例子(对我来说很管用):
如果我没有犯任何复制/粘贴错误,现在应该对你有用了。在
再说一次,如果我犯了英语错误,很抱歉。我对用英语和一般英语写作有点生疏
我希望这对你有帮助。尽管我同意您的数据库应该可以正常工作,而不使用多个表。。。在
相关问题 更多 >
编程相关推荐