【问题标题】:Replace foreign key dropdown with textbox with add/edit icon - Django用带有添加/编辑图标的文本框替换外键下拉列表 - Django
【发布时间】:2018-03-11 06:51:47
【问题描述】:

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

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

有什么办法可以实现吗?

【问题讨论】:

    标签: django django-models django-forms django-admin django-admin-actions


    【解决方案1】:

    你要找的是raw_id_fields

    class ArticleAdmin(admin.ModelAdmin):
        raw_id_fields = ("newspaper", )
    
    • 默认情况下,Django 的 admin 使用选择框界面 (
    • raw_id_fields 是您想要更改为 ForeignKeyManyToManyFieldInput 小部件:

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

    您可以阅读文档here

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果 django_select2 不是 Django 包的一部分,也许你应该明确要安装哪个包以及需要哪些包。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多