2

Django 1.6 的 ModelAdmin 文档让我感到困惑。在https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter上,第三种类型对我来说没有意义。

文档说 list_filter 可以使用三种类型,并给出了每种类型的简要示例。第三个例子是:

class PersonAdmin(admin.ModelAdmin):
    list_filter = (
        ('is_staff', admin.BooleanFieldListFilter),
    )

这个例子让我很困惑,因为我已经可以将一个布尔字段传递给 list_filter 并让管理员呈现 All|Yes|No 选项,我不确定第三种类型的意义是什么。谁能详细说明第三个示例以及为什么人们会使用('field_name',admin.BooleanFieldListFilter)?

4

1 回答 1

0

Django 文档中的示例可能更清楚。[0]

BooleanFieldListFilter由于您所说的原因,您实际上永远不需要以元组样式传递自身:当您BooleanField的模型中有包含在list_filter元组中的 a 时,它已经在内部(自动)使用。

也就是说,这BooleanFieldListFilter是子类化的一个示例FieldListFilter,如果您要编写自己的自定义子类来处理标准布尔值之外的特殊字段,则可以将自定义子类传递给list_filter这种元组样式。

请注意,这不应与更常见的 subclassing 情况混淆SimpleListFilter,后者在文档中被描述为第二种情况。使用这种情况的一个例子是,如果您的模型上有一个方法返回从模型字段的值派生的布尔值,但相关的模型字段本身不能是布尔值。(我希望这不会与上一段混淆。)

0:我检查了 v1.7 和 dev,但似乎还没有发生这种情况。

于 2014-12-27T03:32:42.493 回答