与 Django Admin 中的外键字段相关,默认显示元素是一个下拉列表框,其中包含来自相关模型的所有外键项。我的应用程序将包含数千个项目,我希望更改管理界面并让它使用文本框而不是填充的下拉菜单。
寻找旁边带有添加/编辑图标的文本框,这样我们就不会得到填充值,我们只是直接添加或编辑。
有没有办法实现它。
与 Django Admin 中的外键字段相关,默认显示元素是一个下拉列表框,其中包含来自相关模型的所有外键项。我的应用程序将包含数千个项目,我希望更改管理界面并让它使用文本框而不是填充的下拉菜单。
寻找旁边带有添加/编辑图标的文本框,这样我们就不会得到填充值,我们只是直接添加或编辑。
有没有办法实现它。
你正在寻找的是raw_id_fields
class ArticleAdmin(admin.ModelAdmin):
raw_id_fields = ("newspaper", )
raw_id_fields
是一个字段列表,您希望将其更改为
ForeignKey或ManyToManyField的Input小部件:注意:如果字段是 ForeignKey,则raw_id_fields Input小部件应包含主键;如果字段是ManyToManyField,则应包含逗号分隔的值列表。raw_id_fields小部件在字段旁边显示一个放大镜按钮,允许用户搜索和选择一个值:
你可以在这里阅读文档
您可以尝试使用自定义表单并在此表单域上实现自定义 Widget。(我用于这个决定 3rd 方库django_select2)
from django import forms
from django_select2.forms import ModelSelect2Widget
class KeyWidget(ModelSelect2Widget):
model = ModelToKey
search_fields = ['field__icontains']
def label_from_instance(self, obj):
return u'{}'.format(obj.field)
class CustomForm(forms.ModelForm):
class Meta:
model = ModelWithKey
fields = ('foreign_key_field')
widgets = {
'foreign_key_field': KeyWidget(attrs={'style': 'width:550px'}),
}
您还可以重载表单__init__
以自定义对象的查询集以在此字段中进行选择。