2010-05-12 40 views
7

Cách tiếp cận tốt nhất để mở rộng mô hình Trang web bằng django là gì? Tạo một mô hình mới và ForeignKey trang web hoặc có cách tiếp cận khác cho phép tôi phân lớp mô hình trang web?Làm thế nào để bạn mở rộng mô hình Site trong django?

Tôi thích lớp con hơn, vì quan hệ tôi cảm thấy thoải mái hơn, nhưng tôi lo ngại về tác động sẽ có với Quản trị viên tích hợp.

Trả lời

8

Tôi vừa sử dụng lớp con của riêng mình của Trang web và tạo quản trị viên tùy chỉnh cho trang web đó.

Về cơ bản, khi bạn phân lớp mô hình trong django, nó tạo FK trỏ đến mô hình gốc và cho phép truy cập các trường của mô hình mẹ một cách minh bạch - giống như cách bạn truy cập thuộc tính lớp cha trong pyhon. Được xây dựng trong quản trị viên sẽ không bị bất kỳ cách nào, nhưng bạn sẽ phải hủy đăng ký Sites ModelAdmin và đăng ký ModelAdmin của riêng bạn.

+2

Còn những thứ này thì sao? Họ vẫn làm việc? http://docs.djangoproject.com/en/dev/ref/contrib/sites/#how-django-uses-the-sites-framework –

4

Nếu bạn chỉ muốn thay đổi hành vi của đối tượng, nhưng không thêm bất kỳ trường mới nào, bạn nên cân nhắc sử dụng "mô hình proxy" (mới trong Django 1.1). Bạn có thể thêm các phương thức Python bổ sung vào các mô hình hiện có và hơn thế nữa:

Đây là những gì mô hình kế thừa proxy dành cho: tạo proxy cho mô hình gốc. Bạn có thể tạo, xóa và cập nhật các phiên bản của mô hình proxy và tất cả dữ liệu sẽ được lưu như thể bạn đang sử dụng mô hình gốc (không được ủy quyền). Sự khác biệt là bạn có thể thay đổi những thứ như thứ tự mô hình mặc định hoặc trình quản lý mặc định trong proxy mà không phải thay đổi bản gốc.

Đọc thêm trong the documentation.

+0

Tôi đang tìm cách thêm trường mới; nhưng cảm ơn thông tin. Rất hữu ích bất kể. –

1

Bạn có thể có một kiểu máy khác như SiteProfile có mối quan hệ OneToOne với Site.

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