我在MySQL數據庫中有幾個臨時表,它們共享相同的模式並具有動態名稱。我將如何使用Django與這些表接口?單個模型可以從多個表中繪製數據嗎?單個Django模型,多個表?
22
A
回答
21
我相信你可以做一個工廠函數,它會返回你的模型的動態db_table。
def getModel(db_table):
class MyClass(models.Model):
# define as usual ...
class Meta:
db_table = db_table
return MyClass
newClass = getModel('29345794_table')
newClass.objects.filter(...
編輯:Django不創建該類的_meta
的新實例屬性的每個調用該函數的時間。爲_meta
創建一個新實例取決於類的名稱(Django必須將其緩存在某處)。元類可用於在運行時更改類的名稱:
def getModel(db_table):
class MyClassMetaclass(models.base.ModelBase):
def __new__(cls, name, bases, attrs):
name += db_table
return models.base.ModelBase.__new__(cls, name, bases, attrs)
class MyClass(models.Model):
__metaclass__ = MyClassMetaclass
class Meta:
db_table = db_table
return MyClass
不知道它可以動態地在已定義級進行設置。我自己沒有這樣做,但它可能工作。
您可以隨時設置。
>>> MyModel._meta.db_table = '10293847_table'
>>> MyModel.objects.all()
7
動態創建表格的模型。
from django.db import models
from django.db.models.base import ModelBase
def create_model(db_table):
class CustomMetaClass(ModelBase):
def __new__(cls, name, bases, attrs):
model = super(CustomMetaClass, cls).__new__(cls, name, bases, attrs)
model._meta.db_table = db_table
return model
class CustomModel(models.Model):
__metaclass__ = CustomMetaClass
# define your fileds here
srno = models.IntegerField(db_column='SRNO', primary_key=True)
return CustomModel
並且您可以開始查詢數據庫。
In [6]: t = create_model('trial1')
In [7]: t._meta.db_table
Out[7]: 'trial1'
In [8]: t.objects.all() # default db
Out[8]: [<CustomModel: CustomModel object>, '(remaining elements truncated)...']
In [9]: t.objects.using('test').all() # test db
Out[9]: [<CustomModel: CustomModel object>, '(remaining elements truncated)...']
相關問題
- 1. 在單個django表單中使用多個模型
- 2. Django多個模型,相同的表
- 3. Django與多個模型分頁(表)
- 4. Django的模型多ForeignKey的一個表
- 5. Django:使用模型查詢多個表
- 6. Django:一個模型的多步表格
- 7. 一個表單和多個模型
- 8. Django的多個模型類
- 9. Django多個外鍵模型
- 10. 查詢多個Django模型
- 11. 多個模型vs單個模型
- 12. Django中單個視圖/模板上的多個模型
- 13. 你如何使用django表單來保存多個模型?
- 14. Django的 - 創建表單編輯模型的多個實例
- 15. 多個模型的Django表單無法返回HttpResponse
- 16. Django - 爲同一視圖使用多個模型和表單
- 17. 使用Django Formset從多個模型生成動態表單
- 18. Django模板與多個模型
- 19. 對多個表使用單一模型
- 20. Laravel - 多個表的單一模型
- 21. 單個視圖中的多個模型(Django,python)
- 22. Django中的多個模型的單個自定義管理器
- 23. Django Tastypie:將多個模型添加到單個Tastypie資源
- 24. Django表單 - 每個模型的表單字段
- 25. Django的多對多的關係,用一個表有兩個或多個模型
- 26. django:如何從包含外鍵的多個模型中創建一個表單
- 27. Django模型設計 - 1個或多個表
- 28. Django將兩個表合併成單個模型
- 29. django模型表單錯誤
- 30. Django多模式表單,在一個模型上保存或更新
你可以按照下面的更新動態設置它。 – 2011-02-28 22:58:26