Trong trang chỉ mục quản trị Django, ứng dụng và các mô hình của nó sẽ được liệt kê bình thường. Làm cách nào để các đối tượng mô hình cũng được liệt kê trong trang chỉ mục này? Thay vì chỉ hiển thị ứng dụng, tôi cũng muốn hiển thị các đối tượng mô hình của nó. Làm thế nào nó nên được tùy chỉnh?Tùy chỉnh trang chỉ mục quản trị Django để hiển thị các đối tượng mô hình
Trả lời
Tôi muốn có cùng chức năng cho trang web của mình và thêm nó bằng cách thực hiện các thay đổi nhỏ đối với hệ thống django lõi.
Bước 1: Trước tiên, chúng tôi cần một cách để cho biết các mô hình nào sẽ được liệt kê các thuộc tính của chúng. Thêm mã sau đây để các mô hình mà bạn muốn các trường hợp niêm yết (trong models.py):
class Meta:
list_instances = True
Bước 2: Chúng tôi cần phải sửa đổi Django để nhận biết và đọc thuộc tính mới này. Trong tập tin lõi-django: db/mô hình/options.py, xấp xỉ tại dòng 22 append 'list_instances' để DEFAULT_NAMES:
DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
'unique_together', 'permissions', 'get_latest_by',
'order_with_respect_to', 'app_label', 'db_tablespace',
'abstract', 'managed', 'proxy', 'auto_created', 'list_instances')
và trong cùng một tập tin, khoảng ở dòng 52, tạo ra một lĩnh vực mặc định cho thuộc tính này ngay sau khi các thuộc tính khác:
self.list_instances = False
Bước 3: Chúng tôi cần phải vượt qua thông tin này cho các mẫu mà tạo ra trang index. Trong tập tin lõi-django: contrib/admin/sites.py, bên trong chỉ mục() phương pháp và bên trong "nếu has_module_perms:" một phần, thêm đoạn mã sau:
instances = []
if (model._meta.list_instances == True):
instances = model_admin.queryset(None)
này sẽ tạo ra danh sách các trường hợp để hiển thị , nhưng chỉ khi thuộc tính list_instance được đặt. Trong cùng một tệp, một vài dòng tiếp tục hạ xuống, thêm các giá trị này vào cấu trúc "model_dict".
model_dict = {
'name': capfirst(model._meta.verbose_name_plural),
'admin_url': mark_safe('%s/%s/' % (app_label, model. __name__.lower())),
'perms': perms,
'list_instances':model._meta.list_instances,
'instances': instances,
}
Bước 4: Bước cuối cùng là thay đổi mẫu để hỗ trợ này. Hãy chỉnh sửa tệp core-django /contrib/admin/templates/admin/index.html hoặc sao chép tệp này vào thư mục templates/admin/của ứng dụng cụ thể của bạn. Thêm một vài dòng sau mã tiêu chuẩn để tạo hàng để tạo "hàng phụ" nếu có. Xấp xỉ tại dòng 40, ngay giữa "/ tr>" và "{% endfor%}":
{% if model.list_instances %}
{% for instance in model.instances %}
<tr>
<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
{% if model.perms.change %}
<td><a href="{{ model.admin_url }}{{ instance.id }}/" class="changelink">{% trans 'Change' %}</a></td>
{% else %}
<td> </td>
{% endif %}
</tr>
{% endfor %}
{% endif %}
Điều này sẽ gây ra các mục được liệt kê với tên được tạo ra bởi unicode() phương pháp trong mô hình.
Bước 5: Lo and behold!Nó sẽ giống như thế này:
Edit: Tùy chọn Bước 6: Nếu bạn muốn tên dụ được nhấp quá, chỉ cần thay đổi mẫu (index.html) và thay thế:
<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
với:
<td colspan="2" style="padding-left: 2em;">
{% if model.perms.change %}
<a href="{{ model.admin_url }}{{ instance.id}}">{{ instance }}</a>
{% else %}
{{ instance }}
{% endif %}
</td>
Bạn có thể làm điều này bằng cách thay đổi các mẫu quản trị khác nhau - một trong những gốc được gọi là app_index.html
và kiểm soát những gì được hiển thị ở đó. Cách tốt nhất để điều tra những gì đang xảy ra ở đâu là cài đặt django-debug-toolbar và sau đó xem các mẫu đang được sử dụng cho mỗi chế độ xem để tìm hiểu cách tùy chỉnh.
Hoàn toàn đúng ... nhưng đây là con đường dài tối để đi xuống, tôi đã thử nó trước đây. Các django-admin đã không được thực hiện để được đặc biệt mô-đun hoặc mở rộng. Bạn có hoàn toàn chắc chắn rằng người dùng không thể chỉ cần nhấp vào một trong các liên kết này trước tiên? – Dave
CẬP NHẬT Se câu trả lời tomidor cho django 10
Luôn tuyệt vời để trở lại giải pháp sạch này!
bước 2 - đó là xung quanh dòng 125 (là 52)
bước 3 - trong sites.py - cập nhật các phương pháp mới -
_build_app_dict
bên trong vòng lặp for: for model, model_admin in models.items():
thêm bước 3 như đã nói quanh các đường 430 và 460
instances = []
if (model._meta.list_instances == True):
instances = model_admin.get_queryset(None)
- 1. Cách hiển thị tổng số bản ghi đối với các mô hình trong quản trị django
- 2. Xác định một app_list tùy chỉnh trong trang chỉ mục quản trị django
- 3. Đối tượng có quyền được chỉ định bởi django-guardian không hiển thị trong quản trị
- 4. mô hình không hiển thị trong quản trị django
- 5. Chế độ xem tùy chỉnh Django vào trang quản trị
- 6. Django - chỉ định người quản lý mô hình Django quản trị nên sử dụng
- 7. Django quản trị tùy chỉnh javascript để
- 8. Quản trị Django và hiển thị hình ảnh thu nhỏ
- 9. Hiển thị model's__unicode__ trong django quản trị
- 10. Trình quản lý mô hình tùy chỉnh Django
- 11. Quản trị Django, lọc đối tượng cho formset nội tuyến
- 12. Thêm hành động tùy chỉnh vào đối tượng nội tuyến Django trên giao diện quản trị
- 13. Tùy chỉnh quản trị Django TabularInline trường mặc định
- 14. tùy chỉnh bảng quản trị django?
- 15. Thêm quyền cho mỗi đối tượng để django quản trị
- 16. Hiển thị hàng con trong giao diện quản trị Django
- 17. Làm cách nào để hiển thị mô hình nội tuyến quản trị Django trong một fieldset?
- 18. Quản trị Django - Chế độ xem thay đổi tùy chỉnh
- 19. Làm cách nào để tạo trang tùy chỉnh cho quản trị django?
- 20. Mô hình Django, chức năng tùy chỉnh
- 21. quản trị viên django - thêm các trường biểu mẫu tùy chỉnh không phải là một phần của mô hình
- 22. django - mô hình unicode() hiển thị thuộc tính đối tượng ngoại khóa
- 23. Quản trị viên Django: Cách hiển thị trường được đánh dấu là có thể chỉnh sửa = False 'trong mô hình?
- 24. Sử dụng forms.TextArea cho tùy chỉnh JSON trường trong Django quản trị trang web
- 25. Quản trị viên Django, thông báo lỗi tùy chỉnh?
- 26. Các kiểu đối tượng ForeignKey Django hiển thị Tên trường thay vì giá trị đối tượng
- 27. Quản trị viên Django có khó tùy chỉnh không?
- 28. Trang quản trị Django làm cho các mô hình của tôi không thể nhấp được
- 29. cột tùy chỉnh sử dụng Django quản trị
- 30. Hiển thị các mục trang đếm trong phân trang django
giải thích tốt đẹp !! cảm ơn!! – Nava
bạn đã dạy như một giáo viên ;-) cảm ơn một lần nữa. – Nava
Không sao cả. :) Tôi cũng cần nó cho bản thân mình. Nếu bạn cũng muốn nó khi nhấp vào ứng dụng cụ thể của bạn, đi đến contrib/admin/sites.py một lần nữa và thêm cùng một vài hàng như bạn đã làm trong phương thức index() vào phương thức app_index(). – Setomidor