動的な
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()