sql >> Database >  >> RDS >> Mysql

Eén Django-model, meerdere tafels?

Je zou, geloof ik, een fabrieksfunctie kunnen maken die je model zou retourneren met een dynamische 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 maakt geen nieuwe instantie van de _meta van de klasse attribuut elke keer dat deze functie wordt aangeroepen. Een nieuwe instantie maken voor _meta het is afhankelijk van de naam van de klasse (Django moet het ergens in de cache plaatsen). Een metaklasse kan worden gebruikt om de naam van de klasse tijdens runtime te wijzigen:

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

niet zeker of het dynamisch kan worden ingesteld op een reeds gedefinieerde klasse. Ik heb dit zelf niet gedaan, maar het zou kunnen werken.

Je kunt dit altijd instellen.

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


  1. CakePHP Database verbinding Mysql ontbreekt, of kon niet worden aangemaakt

  2. Hoe sqlcmd &bcp op Ubuntu te installeren

  3. Kan pg gem niet installeren op Windows

  4. Afstemming van PL/SQL-prestaties voor LIKE '%...%'-query's met jokertekens