如何解决如何清除Django自动完成字段中的选择
django-admin中有一个简单的页面:
class Some(admin.ModelAdmin):
...
autocomplete_fields = ['user',...]
问题是,当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
为了解决这个问题以在 Inlines 中按预期工作,我只是硬编码了 'data-allow-clear' 属性:
class MyAutocompleteSelect(AutocompleteSelect):
def build_attrs(self,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,**kwargs)
希望它能帮助您解决问题!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。