2010-02-11 39 views
7

Tôi đã chèn định nghĩa cho chế độ xem trong tệp $ template_dir/sql/$ someTableName.sql. (tạo hoặc thay thế chế độ xem) vì vậy mỗi khi tôi chạy syncdb, các chế độ xem db được tạo.tạo mô hình django cho cơ sở dữ liệu hiện có/chế độ xem sql?

Tôi có thể tạo trong models.py một lớp python truy cập chế độ xem đó không?

Thực tiễn tốt hơn là chỉ sử dụng chức năng sql thô của python thay vào đó?

--- EDIT ---

Một vấn đề khác là tôi có quan điểm không có một khóa chính, nhưng django dường như được giả định sẽ có một vì tôi nhận được một lỗi caught an exception while rendering: (1054, "Unknown column 'appName_currentleagues.id' in 'field list'") Nhưng tôi don 't có một thành viên đó được xác định:

Class CurrentLeagues(models.Model): 
     League = models.ForeignKey(League) 
     class Meta: 
       managed = False 

vì vậy, tôi đoán là django lý thấy rằng tôi không định nghĩa một khóa chính trong lớp CurrentLeagues, vì vậy Django giả định có một gọi id. Có cách nào để nói với Django rằng không có khóa chính (vì đây thực sự là một cái nhìn), hoặc là thậm chí không phải vấn đề của tôi?

Trả lời

5

Xem Unmanaged models

Bạn xác định mô hình như bình thường và thêm managed = False với các tùy chọn meta:

class MyModel(models.Model): 
    ... 
    class Meta: 
     managed = False 
+2

Nhưng làm cách nào để liên kết lớp python đó với chế độ xem mysql mà tôi muốn nó liên kết với? Và tôi có cần phải loại một cách rõ ràng các thành viên của "MyModel" một cách chính xác để phù hợp với chính tả của các lĩnh vực trong xem và nó chỉ hoạt động tự động bằng cách nào đó? –

+0

Tôi chỉ cần đánh vần chế độ xem là 'appName_classname' vì đó là chính tả mà django tự động sử dụng cho mọi phiên bản Mẫu python. –

+1

Bạn có thể tự chuyển tên của chế độ xem bằng cách sử dụng tùy chọn meta 'db_table': http://docs.djangoproject.com/en/dev/ref/models/options/#db-table. Có, bạn sẽ cần phải gõ tên trường trong, nếu không django sẽ không có một phiên bản python của các mô hình của bạn. Nếu bạn muốn giảm số lượng gõ bạn có thể sử dụng một trang web phức tạp của các mô hình trừu tượng và thừa kế, nhưng tôi sẽ giữ mọi thứ đơn giản nhất có thể, ngay cả khi nó có nghĩa là một sự lặp lại ít. –

3

Cố gắng sử dụng python manage.py inspectdb hoặc python manage.py inspectdb> models.py

+0

Chào mừng bạn đến với Stack – qdot

Các vấn đề liên quan