<p>对于python如何管理动态类的创建有一个问题。我不知道python到底是如何工作的,但似乎您这样做的方式并不完全正确。我认为这是因为python类附加到一个模块上,所以第一次执行“getModel”时,它会按照您的预期创建模型。但是,在这之后,每次执行“getModel”时,由于类的名称始终相同,python无法在同一个模块中创建同一个类,因此它会以某种方式返回第一次调用“getModel”时创建的类。(我希望你能理解我的英语,尽管我可能对python动态类创建的工作原理有误解)</p>
<p>在给你答案之前,我做了一些测试。创建动态类的最佳方法似乎是使用“type”(python内置方法),因此可以为每个表创建一个类(这些类必须具有不同的名称)。在</p>
<p>下面是一个你能做的事情的例子(对我来说很管用):</p>
<pre><code>def getModel(type, yyyymm):
if type == 'duration':
newModelClass = type(
'newModelName', #It could be the table name you are going to search in. It must be different for every different db table you want to use. For example: 'orderTable' + yyyymm
(baseModel, ), #Base class for your new model
{
'medianduration' : models.IntegerField(), #New model's attribute
'avgduration' : models.IntegerField(), #New model's attribute
'__module__':__name__, #This is required. If not given, type raises a KeyError
'Meta': type(
'Meta',
(object,),
{
'db_table':'orderTable' + yyyymm, #Here you put the table name you want to use
'__module__':__name__,
}
)
}
)
return newModelClass
</code></pre>
<p>如果我没有犯任何复制/粘贴错误,现在应该对你有用了。在</p>
<p>再说一次,如果我犯了英语错误,很抱歉。我对用英语和一般英语写作有点生疏</p>
<p>我希望这对你有帮助。尽管我同意您的数据库应该可以正常工作,而不使用多个表。。。在</p>