1

与 Django Admin 中的外键字段相关,默认显示元素是一个下拉列表框,其中包含来自相关模型的所有外键项。我的应用程序将包含数千个项目,我希望更改管理界面并让它使用文本框而不是填充的下拉菜单。

寻找旁边带有添加/编辑图标的文本框,这样我们就不会得到填充值,我们只是直接添加或编辑。

有没有办法实现它。

4

2 回答 2

1

你正在寻找的是raw_id_fields

class ArticleAdmin(admin.ModelAdmin):
    raw_id_fields = ("newspaper", )
  • 默认情况下,Django 的管理员对ForeignKey字段使用选择框界面 (<select>) 。有时您不希望产生必须选择所有相关实例以显示在下拉列表中的开销。
  • raw_id_fields是一个字段列表,您希望将其更改为 ForeignKeyManyToManyField的Input小部件:

注意:如果字段是 ForeignKey,则raw_id_fields Input小部件应包含主键;如果字段是ManyToManyField,则应包含逗号分隔的值列表。raw_id_fields小部件在字段旁边显示一个放大镜按钮,允许用户搜索和选择一个值:

你可以在这里阅读文档

于 2021-09-06T08:16:02.010 回答
0

您可以尝试使用自定义表单并在此表单域上实现自定义 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__以自定义对象的查询集以在此字段中进行选择。

于 2017-09-29T12:45:13.567 回答