概要: | 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)
注意, 某些恶意操作可以绕过这种使用限制(例如一个经过精心构造的伪装请求)