Đây là cách tôi giải quyết nó, nhưng nó cảm thấy quá giống như một hack (cho một hack).
Tôi đã sử dụng jQuery được lưu trữ từ các API của Google để sửa đổi DOM, tận dụng lợi thế của tập lệnh 'show/hide' của Django. Nếu bạn nhìn vào các nguồn html của một trang admin, kịch bản cuối cùng được tải là thế này:
<script type="text/javascript" src="/media/admin/js/admin/CollapsedFieldsets.js"></script>
Các bình luận trong tập tin đó đã cho tôi ý tưởng: Đòn bẩy ModelAdmin media definitions để tải riêng kịch bản dom làm thay đổi tôi.
from django.contrib import admin
from django.contrib.admin.sites import AdminSite
from myapp.models import *
import settings
media = settings.MEDIA_URL
class MyParticularModelAdmin(admin.ModelAdmin):
# .....
class Media:
js = ('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js',
media+'js/addCollapseToAllStackedInlines.js')
# .....
Và sau đó bên trong các tập tin tham chiếu javascript:
// addCollapseToAllStackedInlines.js
$(document).ready(function() {
$("div.inline-group").wrapInner("<fieldset class=\"module aligned collapse\"></fieldset>");
});
Kết quả cuối cùng chỉ hoạt động trên StackedInline, KHÔNG TabularInline.
Nguồn
2010-01-08 04:59:16
Lưu ý, các giải pháp mà làm điều này trong JS (và một hiện tại của tôi không) KHÔNG phải thu gọn bộ lĩnh vực mà có sai sót trong họ! –