sql >> Database teknologi >  >> RDS >> Mysql

Enkelt Django-model, flere borde?

Du kunne, tror jeg, lave en fabriksfunktion, der ville returnere din model 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 opretter ikke en ny forekomst af klassens _meta attribut hver gang denne funktion kaldes. Oprettelse af en ny instans for _meta det afhænger af navnet på klassen (Django skal cache det et sted). En metaklasse kan bruges til at ændre navnet på klassen under kørsel:

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

ikke sikker på om det kan indstilles dynamisk på en allerede defineret klasse. Jeg har ikke selv gjort dette, men det kan måske virke.

Du kan indstille dette når som helst.

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


  1. Personsøgning med Oracle

  2. fuldCalendar begivenheder post metode til MySQL

  3. Ændre grænse for Mysql rækkestørrelse for stor

  4. MySQL TRUNCATE() Funktion – Afkort et tal til et specificeret antal decimaler