你可以用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