假设:我有一个名为 Car 的模型,它与一个用户相关。我担心的是默认的 Django Admin。我通过下拉菜单将用户分配给汽车(这是默认的 Django 行为,所以有人告诉我)。
当我在下拉列表中有 1000 多个用户可供选择时会发生什么。管理员是否处理这个问题,如果是这样如何处理?
假设:我有一个名为 Car 的模型,它与一个用户相关。我担心的是默认的 Django Admin。我通过下拉菜单将用户分配给汽车(这是默认的 Django 行为,所以有人告诉我)。
当我在下拉列表中有 1000 多个用户可供选择时会发生什么。管理员是否处理这个问题,如果是这样如何处理?
默认管理 UI 显示一个下拉列表。使用该raw_id_fields
选项通过搜索按钮获取弹出窗口。此窗口可让您查找和选择链接对象。请参阅文档:https ://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields
默认情况下,Django 的管理员使用选择框接口 () 来处理外键字段。有时您不希望产生必须选择所有相关实例以显示在下拉列表中的开销。
您可以查看django-grappelli
,这是一个增强管理界面的应用程序。该文档ForeignKey
描述了一个或ManyToMany
关系的自动完成,使用raw_id_fields
.
您可以使用 django-select2 插件https://github.com/applegrew/django-select2。
您可以执行以下操作:
from django_select2 import AutoModelSelect2Field
class CategoryChoices(AutoModelSelect2Field):
queryset = models.Category.objects
search_fields = ['name__icontains', 'code__icontains']
class NewsAdminForm(forms.ModelForm):
category = CategoryChoices()
class Meta:
model = models.News
exclude = ()
# register in admin
class NewsAdmin(admin.ModelAdmin):
form = NewsAdminForm
admin.site.register(News, NewsAdmin)