我有一个自定义的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个钩子,但在这种情况下不起作用.

管理员声明是:

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

这对表单域小部件没有影响,tags个仍然使用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相关问答推荐

如何在对接合成时创建两个Postgres数据库?

如何在Django中获取标记<;输入>;的';值';属性?

如何在Django上创建ManyToMany管理面板?

Django和静态文件

通过get_form_kwargs将请求传递给Django表单未能使表单访问self.request.user.

从一个组中获取所有用户 - Django

如何在 Django REST Framework API 响应中使用多标签过滤器?

Django ORM:获取每个类别的月平均价格

Django ORM 查询优化问题

Django:在模板中显示当前语言环境

Django 1.9 中 django.db.models.loading.get_model() 的类似功能是什么?

Django:获取上次用户访问日期

使用 sqlite 运行 django 测试

模拟 Django 查询集以测试采用查询集的函数

Django - 每 x 秒运行一个函数

Django 1.7 - 如何 suppress (1_6.W001)某些元素单元测试可能无法按预期执行.?

如何使 Django 的开发服务器公开?

django.urls.path中name参数的作用是什么?

在 Django 中查询 top x 元素

Django ModelForm 覆盖小部件