django - 如何在 django 管理员更新操作中使用带有自动完成字段的表单
问题描述
我在管理面板中使用自定义表单,其中包含两个自动完成字段。
我的问题是我不知道如何在更新操作中使用表单以便存储的数据显示为具有自动完成功能。
在我的更新操作实现中,出现的值没有自动完成功能。
我该如何解决?
我的表格
class ModelSeoMetadatumForm(forms.ModelForm):
name = ModelChoiceField(
required=False,
queryset=MetaTag.objects.exclude(name__isnull=True).values_list('name', flat=True).distinct(),
widget=autocomplete.ModelSelect2(url='seo:name-autocomplete')
)
property = ModelChoiceField(
required=False,
queryset=MetaTag.objects.exclude(property__isnull=True).values_list('property', flat=True).distinct(),
widget=autocomplete.ModelSelect2(url='seo:property-autocomplete')
)
class Meta:
model = ModelSeoMetadatum
fields = ('name', 'content', 'property', 'content_type', 'object_id')
我的管理员
@admin.register(ModelSeoMetadatum)
class ModelSeoMetadatumAdmin(admin.ModelAdmin):
add_form = ModelSeoMetadatumForm
list_display = ('id', 'name', 'content', 'property', 'content_object')
fields = ('name', 'content', 'property', 'content_type', 'object_id')
def get_form(self, request, obj=None, **kwargs):
defaults = {}
if obj is None:
defaults['form'] = self.add_form
defaults.update(kwargs)
return super().get_form(request, obj, **defaults)
解决方案
您应该覆盖小部件并将管理站点作为参数提供给它。
管理类:
class MyAdmin(admin.ModelAdmin):
form = MyForm
表格定义:
class MyForm(forms.ModelForm):
class Meta:
widgets = {
'some_lookup_field': AutocompleteSelect(
MyModel._meta.get_field('some_lookup_field').remote_field,
admin.site,
attrs={'style': 'width: 20em'},
),
}
请注意,您需要在查找字段的管理员定义中至少有一个 search_filter。
在这里查看一个改进的版本,如果需要可以扩展链接
推荐阅读
- python - 如何使用没有名称的beautifulsoup 查找表?对于蟒蛇
- javascript - 为什么 immutability-helper 需要这行代码
- wget - wget 不会说英语了
- ruby-on-rails - 'rake db:migrate:up VERSION=' 中止
- python-3.x - 图像未保存在打开的 cv 写入功能中
- java - 在 Java 中读取/编辑/写入 jpg IPTC 元数据
- c# - 我怎样才能让高分更新并保持不变直到被击败
- java - jni java.lang.UnsatisfiedLinkError 调用现有JDK lib中的现有方法时
- reactjs - 将参数传递给 mapDispatchToProps()
- go - 如何设置 gorilla/websocket 连接以充当浏览器应用程序的 JSON-RPC 客户端?