django - 如何清除 Django 自动完成字段中的选择

标签 django django-admin

django-admin中有一个简单的页面:

class Some(admin.ModelAdmin):
  ...
  autocomplete_fields = ['user', ...]

问题是当选择用户时,我无法清除管理界面中的选择。

自动完成字段是否有一些设置可以清除选择?

最佳答案

我发现外键字段的自动完成使用AutocompleteSelect,并且它的编码是在需要模型时不显示清除选项:

来自django.contrib.admin.widgets中的AutocompleteMixin:

def build_attrs(self, base_attrs, extra_attrs=None):
"""
Set select2's AJAX attributes.

Attributes can be set using the html5 data attribute.
Nested attributes require a double dash as per
https://select2.org/configuration/data-attributes#nested-subkey-options
"""
attrs = super().build_attrs(base_attrs, extra_attrs=extra_attrs)
attrs.setdefault('class', '')
attrs.update({
    'data-ajax--cache': 'true',
    'data-ajax--type': 'GET',
    'data-ajax--url': self.get_url(),
    'data-theme': 'admin-autocomplete',
    'data-allow-clear': json.dumps(not self.is_required),
    'data-placeholder': '',  # Allows clearing of the input.
    'class': attrs['class'] + (' ' if attrs['class'] else '') + 'admin-autocomplete',
})
return attrs

为了解决这个问题,使其在内联中按预期工作,我只是硬编码了“data-allow-clear”属性:

class MyAutocompleteSelect(AutocompleteSelect):
def build_attrs(self, base_attrs, extra_attrs=None):
    attrs = super().build_attrs(base_attrs, extra_attrs=extra_attrs)
    attrs.update({'data-allow-clear':'true'})
    return attrs

最后,我的内联类:

class MyInLine(admin.TabularInline):
autocomplete_fields = ('my_autocomplete_field',)

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'my_autocomplete_field':
        db = kwargs.get('using')
        kwargs['widget'] = MyAutocompleteSelect(db_field.remote_field, self.admin_site, using=db)
    return super().formfield_for_foreignkey(db_field, request, **kwargs)

希望能帮助您解决问题!

关于django - 如何清除 Django 自动完成字段中的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63600898/

相关文章:

django - GeoDjango 管理员 : show PointField on a map?

jquery - 使用ajax删除Django db中的记录

jquery - 如何编写一个 AJAX 函数将 HTML 加载到两个不同的 DIV 中?

python - Django 编辑子级中父级的字段

django - 在 Django 管理中限制 ManyToMany MultipleSelect 的查询集

填写个人资料字段时,Django 用户创建在管理中失败

Django-管理员 : list_display TextField

Django REST Framework 创建嵌套序列化程序会出现 pk 错误

python - 用乏味的 __init__ 模拟一个类

python - 无法在 Windows 中的 python 中安装 MySQL