Admin 后台管理扩展

概要:Admin后台的字段扩展

ForeignKeyAutocompleteAdmin - 该扩展字段在Admin后台中显示为一个搜索输入框. 前端显示的内容由 ForeignKeySearchInput form的weight渲染, 通过jQuery的autocompletion功能实现搜索效果.

用法举例

启用后台管理的自动补全功能,根据示例编辑 admin.py 文件:

from django.contrib import admin
from foo.models import Permission
from django_extensions.admin import ForeignKeyAutocompleteAdmin


class PermissionAdmin(ForeignKeyAutocompleteAdmin):
    # User is your FK attribute in your model
    # first_name and email are attributes to search for in the FK model
    related_search_fields = {
    'user': ('first_name', 'email'),
    }

    fields = ('user', 'avatar', 'is_active')

    ...

admin.site.register(Permission, PermissionAdmin)

如果使用了 django-reversion ,参考下面的例子:

from django.contrib import admin
from foo.models import MyVersionModel
from reversion.admin import VersionAdmin
from django_extensions.admin import ForeignKeyAutocompleteAdmin

class MyVersionModelAdmin(VersionAdmin, ForeignKeyAutocompleteAdmin):
    ...

admin.site.register(MyVersionModel, MyVersionModelAdmin)

如果想要限制搜索功能中的自动匹配, 覆写admin的 get_related_filter 方法. 例如, 添加一条限制给非管理员用户: 仅能向自己创建的文章中添加附件

class AttachmentAdmin(ForeignKeyAutocompleteAdmin):

    ...

    def get_related_filter(self, model, request):
        user = request.user
        if not issubclass(model, Article) or user.is_superuser():
            return super(AttachmentAdmin, self).get_related_filter(
                model, request
            )
        return Q(owner=user)

注意, 某些恶意操作可以绕过这种使用限制(例如一个经过精心构造的伪装请求)