Вы можете написать такой фильтр с помощью AJAX (использование jQuery или подобного фреймворка было бы самым простым способом сделать это).Вы бы создали собственный виджет формы с двумя списками.Первый будет заполнен всеми доступными программами сервером при загрузке страницы.Затем ваш javascript будет ожидать выбора, а затем запросит у сервера (то есть AJAX-часть) список курсов в этой программе и обновит второй список соответствующим образом.
Однако для вашегоЯ бы сказал, что ситуация излишняя;это было бы гораздо проще сделать, поскольку в ответе jammon сказано: и поместить администратора модели Grade в соответствующий администратор курса (это называется встроенным администратором модели; см. документацию по Django ).на предмет).К сожалению, приведенный в их ответе пример кода не работает, поэтому я создал следующий пример, который работает для меня.
Основной способ настройки администратора 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)