Chúng tôi đã thực hiện điều này khá rộng rãi trong các ứng dụng của chúng tôi với MySQL để làm việc xung quanh giới hạn cơ sở dữ liệu duy nhất của Django. Ứng dụng của chúng tôi có một vài cơ sở dữ liệu sống trong một cá thể MySQL duy nhất. Chúng ta có thể đạt được mô hình cơ sở dữ liệu chéo tham gia theo cách này miễn là chúng ta đã tạo ra các khung nhìn cho mỗi bảng trong cơ sở dữ liệu "hiện tại".
Theo như chèn/cập nhật vào lượt xem, với các trường hợp sử dụng của chúng tôi, chế độ xem về cơ bản là "chọn * từ [db.table];". Nói cách khác, chúng tôi không thực hiện bất kỳ phép nối phức tạp hoặc lọc nào để chèn/cập nhật kích hoạt từ save() hoạt động tốt. Nếu trường hợp sử dụng của bạn yêu cầu tham gia phức tạp như vậy hoặc lọc rộng, tôi nghi ngờ bạn sẽ không gặp bất kỳ sự cố nào đối với các trường hợp chỉ đọc, nhưng có thể gặp phải sự cố chèn/cập nhật. Tôi nghĩ rằng có một số ràng buộc cơ bản trong MySQL ngăn cản bạn cập nhật thành các chế độ xem chéo bảng, có các bộ lọc phức tạp, v.v.
Dù sao, số dặm của bạn có thể thay đổi nếu bạn đang sử dụng RDBMS ngoài MySQL, nhưng Django doesn ' t thực sự quan tâm nếu nó ngồi trên đầu trang của một bảng vật lý hoặc xem. Nó sẽ là RDBMS xác định xem nó có thực sự hoạt động như bạn mong đợi hay không. Như một người bình luận trước đó đã lưu ý, bạn có thể sẽ ném syncdb ra ngoài cửa sổ, mặc dù chúng ta đã làm việc thành công xung quanh nó với một tín hiệu post-syncdb thả bảng vật lý do Django tạo ra và chạy lệnh "create view ..." của chúng ta. Tuy nhiên, tín hiệu post-syncdb là một chút bí truyền theo cách nó được kích hoạt, vì vậy hãy báo trước emptor ở đó.
EDIT: Tất nhiên bởi "tín hiệu sau syncdb" Ý tôi là "hậu syncdb nghe"
Nguồn
2009-02-07 02:56:26
Để lệnh syncdb hoạt động, không đặt lớp mô hình của bạn cho chế độ xem trong models.py mà là một tệp riêng biệt! –
Tốt hơn: xem câu trả lời bên dưới về managed = False trong lớp Meta trên mô hình của bạn. –
Chế độ xem không cần phải có cùng tên với ứng dụng. Chỉ cần sử dụng trường Meta db_table. Ví dụ, chế độ xem có tên là its_a_View. lớp Meta: db_table = u'its_a_view ' – grantk