Và phương pháp trong bài đăng của bạn không hoạt động vì ...?
Nếu vì một số lý do bạn thực sự cần phải fiddle với lớp FlatPage dựng sẵn và chỉnh sửa nó tự động, bạn có thể treo vào tín hiệu class_prepared:
http://docs.djangoproject.com/en/dev/ref/signals/#class-prepared
Sửa
Dưới đây là cách bạn thực hiện với class_prepared:
from django.db.models.signals import class_prepared
from django.db import models
def alter_flatpages(sender, **kwargs):
if sender.__module__ == 'django.contrib.flatpages.models' and sender.__name__ == 'FlatPage':
order = models.IntegerField()
order.contribute_to_class(sender, 'order')
class_prepared.connect(alter_flatpages)
Đặt điều này vào, ví dụ: 'signals.py' trong cùng thư mục với settings.py của bạn và thêm 'tín hiệu' vào đầu (điều này quan trọng, để đảm bảo trình xử lý tín hiệu được cài đặt đúng lúc) danh sách INSTALLED_APPS.
Tuy nhiên, điều này vẫn không nhận được trường được hiển thị trong Quản trị viên, bởi vì có một lớp ModelAdmin tùy chỉnh cho Trang tính liệt kê rõ ràng các trường. Vì vậy, sau khi nó được đăng ký trong các ứng dụng flatpages, bạn cần phải hủy đăng ký nó ở đâu đó (admin.site.unregister) và đăng ký một ModelAdmin của riêng bạn.
Cảm ơn rất nhiều! Tôi đoán đây là những gì tôi đang tìm kiếm. –
Hãy nhớ rằng cách tiếp cận này sẽ không hoạt động với FlatpageFallbackMiddleware mặc định - nó sẽ trả về các phiên bản của mô hình Flatpage gốc, không phải là phần mở rộng của bạn. Vì vậy, bạn sẽ phải viết phiên bản của riêng bạn, hoặc sử dụng URL/chế độ xem của riêng bạn. Ngoài ra, bây giờ bạn đã có hai bảng mà thực sự chỉ có một là cần thiết, mà kết quả trong các truy vấn ít hiệu quả.Tất cả trong tất cả, tôi khuyên bạn nên viết ứng dụng flatpage của riêng bạn từ đầu, hoặc sử dụng cách tiếp cận class_prepared để monkeypatch trường trong, thay vì sử dụng thừa kế. –