让我们看一下这个例子:
class Author(models.Model):
...
class Book(models.Model):
author = models.ForeignKey(Author, related_name='books'...)
...
class Chapter(models.Model):
book = models.ForeignKey(Book, related_name='chapters' ...)
...
对于管理员,让我们像这样配置ChapterAdmin
:
class ChapterAdmin(admin.ModelAdmin):
list_filter = ('book__author', 'book',)
...
这提供了相关的过滤器 Author
和 Book
.
问题来了:
当用户单击筛选器中的Author
book__author
时,主表中的结果将相应地进行筛选。好。但是book
过滤器仍然列出所有可用的Books
,而不管book_author
过滤器如何。有没有办法使book
过滤器依赖于book__author
过滤器,以便在选择Author
时,过滤器选项中仅列出与Author
相关的Books
?
看起来您可以使用SimpleListFilter
来完成这项工作,因为您在lookups
方法中有请求,因此您可以知道选择了哪个作者并仅提供他的书籍列表,文档中的更多信息:https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter