你可以用AJAX編寫這樣的過濾器(使用jQuery或類似的框架將是最簡單的方法)。您將創建一個包含兩個列表的自定義窗體小部件。當頁面被加載時,第一個將被服務器填充所有可用的程序。然後,您的JavaScript會等待選擇,然後向服務器(即AJAX部分)索取該程序中的課程列表,並相應地更新第二個列表。
但是,對於你的情況,我會說這是矯枉過正;作爲jammon's answer says將更容易做到,並將相應課程管理員中的成績模型的管理員(這稱爲內嵌模型管理員;請參閱有關主題的the Django documentation)。不幸的是,他們的答案中給出的示例代碼無效,所以我創建了以下適用於我的示例。
配置Django管理員的基本方法是簡單地在admin.py
中向管理站點註冊模型。你可能做的事情大致如下:
from django.contrib import admin
from myapp.models import Program, Course, Grade
admin.site.register(Program)
admin.site.register(Course)
admin.site.register(Grade)
相反,我們要編輯的成績爲一療程內課程本身的管理部分。首先,我們需要定義一個內聯管理類等級:
class GradeInline(admin.TabularInline):
model = Grade
extra = 1
注意,您可以選擇從任一admin.TabularInline
或admin.StackedInline
繼承。通常,我更喜歡TabularInline
的外觀,但它可以取決於你的模型,所以試試這兩個。 extra
選項定義了向用戶顯示多少個空白表單。
接下來,我們需要告訴課程管理頁面添加的直列形式:
class CourseAdmin(admin.ModelAdmin):
model = Course
inlines = (GradeInline,)
最後,我們不再需要顯示獨立等級管理,所以我們並不需要與註冊它管理網站。相反,我們必須指定我們的自定義管理類用於課程模型。這意味着最終admin.py
文件的應用程序如下:
from django.contrib import admin
from myapp.models import Program, Course, Grade
class GradeInline(admin.TabularInline):
model = Grade
extra = 1
class CourseAdmin(admin.ModelAdmin):
model = Course
inlines = (GradeInline,)
admin.site.register(Program)
admin.site.register(Course, CourseAdmin)
你說的是客戶端篩選,即選擇一個程序,該課程列表的變化,以反映該程序只課程?或者,您是否想在運行時通過特定程序過濾課程列表? – 2011-05-23 21:32:10