admin list_filter值取决于其他过滤器

时间:2012-05-06 15:56:55

标签: django django-admin django-admin-filters

让我们来看看这个例子:

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',)
    ...

这会根据相关AuthorBook提供精彩的过滤条件。

以下是问题:

当用户点击Author过滤器中的book__author时,主表中的结果会相应地进行过滤。好。但book过滤器仍会列出所有可用的Books,无论book_author过滤器如何。有没有办法让book过滤器依赖于book__author过滤器,以便在选择Author时,只有BooksAuthor相关联是否列在过滤器选项中?

1 个答案:

答案 0 :(得分:3)

看起来您可以使用SimpleListFilter来完成这项工作,因为您可以使用lookups方法获取请求,告诉您选择了哪位作者,并且只提供他的书籍列表,更多信息请参阅文档:https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter