編集:Django1.3を使用する
私は自分自身を教育するためにカスタムウィジェットを作成しましたが、ページがフェッチされたときにDjangoが次のように言う問題を乗り越えることができません。
'FooTestWidget' object has no attribute 'attrs'
'attrs'引数を使用したくないので、デフォルトでNoneに設定しました(空の辞書、たとえば{}も試しました)。そのため、Djangoが文句を言う理由について混乱しています。
widgets.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))
admin.py
class UserAdminForm(ModelForm):
class Meta:
model = User
widgets = {
'name_family': FooTestWidget,
}
class UserAdmin(admin.ModelAdmin):
form = UserAdminForm
model.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の動作バージョンを次に示します。次に、他に1つまたは2つの小さな変更を加えました(ここで説明する問題には関連付けられていませんでしたが、正常に動作しなくなりました)。このバージョンは、期待どおりに機能するようになりました。
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)