Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Model Django tunggal, banyak tabel?

Anda dapat, saya yakin, membuat fungsi pabrik yang akan mengembalikan model Anda dengan 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 tidak membuat turunan baru dari _meta . kelas atribut setiap kali fungsi ini dipanggil. Membuat instance baru untuk _meta itu tergantung pada nama kelas (Django harus menyimpannya di suatu tempat). Metaclass dapat digunakan untuk mengubah nama kelas saat runtime:

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

tidak yakin apakah itu dapat diatur secara dinamis pada kelas yang sudah ditentukan. Saya sendiri belum melakukannya, tetapi mungkin berhasil.

Anda dapat mengatur ini kapan saja.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbaiki "ERROR 1222 (21000):Pernyataan SELECT yang digunakan memiliki jumlah kolom yang berbeda" saat menggunakan UNION di MySQL

  2. Membuat tabel dengan mysql, php dan ajax (dengan jquery)

  3. Tabel tidak dapat dibuat di mysql -Error 1064

  4. Memeriksa tabel untuk tumpang tindih waktu?

  5. Distribusi ulang suara sambil menghilangkan kandidat