Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mô hình Django đơn, nhiều bảng?

Tôi tin rằng bạn có thể tạo một hàm gốc sẽ trả về mô hình của bạn với một động 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( ...

CHỈNH SỬA:Django không tạo một phiên bản mới của _meta của lớp thuộc tính mỗi khi hàm này được gọi. Tạo một phiên bản mới cho _meta nó phụ thuộc vào tên của lớp (Django phải lưu nó vào bộ nhớ cache ở đâu đó). Một siêu kính có thể được sử dụng để thay đổi tên của lớp trong thời gian chạy:

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

không chắc liệu nó có thể được đặt động trên một lớp đã được xác định hay không. Bản thân tôi chưa làm việc này nhưng nó có thể hoạt động.

Bạn có thể đặt điều này bất cứ khi nào.

>>> 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. Dấu thời gian (tự động) được cập nhật khi nào?

  2. Cách tốt nhất để lưu trữ và truy xuất các từ đồng nghĩa trong cơ sở dữ liệu mysql

  3. Làm cách nào để đặt lại các số thứ tự để trở nên liên tiếp?

  4. mysql - CẬP NHẬT hàng dựa trên các hàng khác

  5. MySQL:DUY NHẤT, nhưng KHÔNG ĐỦ - được phép bằng cách tạo bảng. Nhiều hơn 1 NULL được phép chèn. Tại sao?