django admin filter_list by manytomany 提交

问题描述

models.py

class Author(models.Model):
    nickname = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=255)
    authors = models.ManyToManyField(Author)

admin.py

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_filter = (???,)

如何通过管理面板过滤特定作者的书籍。

解决方法

您可以通过双下划线查看关系,因此您可以过滤该书的 nicknameauthor

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_filter = ('authors__nickname',)

或按照the documentation of list_filter中的规定:

(…)

list_filter 中的字段名称还可以使用 __ 查找,(…)