编辑:使用 Django 1.3
我已经构建了一个自定义小部件来教育自己,但我无法解决在获取页面时 Django 说的问题:
'FooTestWidget' object has no attribute 'attrs'
我不想使用 'attrs' 参数,并且我已将其设置为默认值 None(也尝试了一个空字典,例如 {}),所以我对 Django 抱怨的原因感到困惑。
小部件.py
class FooTestWidget(Widget):
"""
A very silly widget to test I can do anything
"""
def __init__(self, attrs=None):
pass
def render(self, name, value, attrs=None):
tpl = Template(u"""<h1>This is here instead of a CharField</h1>""")
return mark_safe(tpl.substitute(colour=value))
管理员.py
class UserAdminForm(ModelForm):
class Meta:
model = User
widgets = {
'name_family': FooTestWidget,
}
class UserAdmin(admin.ModelAdmin):
form = UserAdminForm
模型.py
class User(models.Model):
id = models.AutoField(primary_key=True, db_column='USE_ID')
name_given = models.CharField(max_length=200, db_column='USE_NAME_GIVEN')
name_family = models.CharField(max_length=200, db_column='USE_NAME_FAMILY')
丹尼尔帮助后的工作版本
这是widgets.py的工作版本,在接受了丹尼尔在他的回答中解释的内容,然后我做了一两个其他的小改动(这与这里描述的问题无关,但它停止了它应该正常工作)。这个版本现在可以像我预期的那样工作:
from datetime import date
import re
from django.forms.widgets import Widget, Select
from django.utils.safestring import mark_safe
from django.forms import widgets
from django.template.base import Template
__all__ = ('FooTestWidget',)
RE_DATE = re.compile(r'(\d{4})-(\d\d?)-(\d\d?)$')
class FooTestWidget(Widget):
"""
A very silly widget to test I can do anything
"""
#def __init__(self, attrs={}):
# pass
def render(self, name, value, attrs=None):
sout = u"""<h1>This is here instead of a CharField</h1>"""
return mark_safe(sout)