sql >> Databáze >  >> RDS >> Mysql

Jeden model Django, více stolů?

Domnívám se, že byste mohli vytvořit tovární funkci, která by vrátila váš model pomocí dynamického 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( ...

EDIT:Django nevytváří novou instanci třídy _meta atribut pokaždé, když je tato funkce volána. Vytvoření nové instance pro _meta závisí na názvu třídy (Django to musí někde uložit do mezipaměti). Metatřídu lze použít ke změně názvu třídy za běhu:

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

nejsem si jistý, jestli to lze nastavit dynamicky na již definované třídě. Sám jsem to nedělal, ale mohlo by to fungovat.

Toto můžete nastavit kdykoli.

>>> MyModel._meta.db_table = '10293847_table'
>>> MyModel.objects.all()


  1. Automatický sběr dat o dokončených úkolech v MS SQL Server

  2. sekvenční sumace dotazů Oracle na řádky

  3. Proč moje levé připojení t-sql nefunguje?

  4. Prázdný seznam parametrů klauzule IN v MySQL