sql >> Databasteknik >  >> RDS >> Mysql

Enkel Django-modell, flera bord?

Du kan, tror jag, göra en fabriksfunktion som skulle returnera din modell med en dynamisk 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 skapar inte en ny instans av klassens _meta attribut varje gång den här funktionen anropas. Skapar en ny instans för _meta det beror på namnet på klassen (Django måste cache den någonstans). En metaklass kan användas för att ändra namnet på klassen vid körning:

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

inte säker på om den kan ställas in dynamiskt på en redan definierad klass. Jag har inte gjort det här själv men det kanske fungerar.

Du kan ställa in detta när som helst.

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


  1. Hur man väljer de senaste 3 minuternas poster från MySQL med PHP

  2. VÄLJ IN I MySQL

  3. Kör två SQL-frågor på en php-sida (SET + SELECT)

  4. Hur kan jag skriva SQL för en tabell som har samma namn som ett skyddat nyckelord i MySql?