gpt4 book ai didi

Django Admin - 覆盖自定义表单字段的小部件

转载 作者:行者123 更新时间:2023-11-28 19:36:59 25 4
gpt4 key购买 nike

我有一个自定义 TagField 表单域。

class TagField(forms.CharField):
def __init__(self, *args, **kwargs):
super(TagField, self).__init__(*args, **kwargs)
self.widget = forms.TextInput(attrs={'class':'tag_field'})

如上所示,它使用了一个 TextInput 表单字段小部件。但在管理员中,我希望使用 Textarea 小部件显示它。为此,有 formfield_overrides Hook ,但它不适用于这种情况。

管理员声明是:

class ProductAdmin(admin.ModelAdmin):
...
formfield_overrides = {
TagField: {'widget': admin.widgets.AdminTextareaWidget},
}

这对表单字段小部件没有影响,标签 仍然使用 TextInput 小部件呈现。

非常感谢任何帮助。

--
奥马特

最佳答案

django 管理员为其许多字段使用自定义小部件。覆盖字段的方法是创建一个用于 ModelAdmin 对象的表单。

# forms.py

from django import forms
from django.contrib import admin

class ProductAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ProductAdminForm, self).__init__(*args, **kwargs)
self.fields['tags'].widget = admin.widgets.AdminTextareaWidget()

然后,在您的 ModelAdmin 对象中,您指定以下形式:

from django.contrib import admin
from models import Product
from forms import ProductAdminForm

class ProductAdmin(admin.ModelAdmin):
form = ProductAdminForm

admin.site.register(Product, ProductAdmin)

此时您还可以覆盖查询集:例如根据模型中的另一个字段过滤对象(因为 limit_choices_to 无法处理)

关于Django Admin - 覆盖自定义表单字段的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com