IPアドレス/ドメイン名のエントリにMultiValueFieldを実装しようとしています。これは、データを入力するために期待どおりに動作します。 私の問題は、特定のデータにバインドされたフォームを表示する場合、[IPアドレス/ドメイン名]フィールドは空のままです。他のすべてのフィールドには、目的のデータが入力されます。通常のCharFieldを使用すると、私が期待するデータが得られます。しかし、私のカスタムフィールドでは機能しません。 私のカスタムMultiWidgetがその解凍メソッドを呼び出さないという事実まで追跡しました。ここでdjango multiwidgetサブクラスがdecompress()を呼び出さない
は私のフィールドです:
class accessIPField(forms.MultiValueField):
"""
custom Field for access IP
"""
def __init__(self, *args, **kwargs):
self.fields=(
forms.IPAddressField(label='IP Adress'),
forms.CharField(max_length=50,label='Domain Name')
)
self.widget=accessIPWidget()
super(accessIPField,self).__init__(self.fields,self.widget, *args, **kwargs)
def compress(self,data_list):
if data_list:
return " ".join(data_list)
そして、ここでは私のウィジェットです:
class accessIPWidget(forms.MultiWidget):
"""
Widget to display IP Adress/Domain name pairs
"""
def __init__(self,*args,**kwargs):
self.widgets=(forms.TextInput(),forms.TextInput())
super(accessIPWidget,self).__init__(self.widgets,*args,**kwargs)
def decompress(self,value):
print 'decompress called'
if value:
return value.rsplit()
return [None,None]
def format_output(self, rendered_widgets):
return u'\n'.join(rendered_widgets)
全部が今のように
self.fields['access_IPs'] = accessIPField()
として(より大きな文脈で)と呼ばれていますあなたは私の圧縮メソッドにprintステートメントを入れて、そのステートメントを見ることはできません。また、私がfoobarのようなものにcompressの名前を変更した場合、私は(MultiWidgetのdjangoコードによると)NotImplementedErrorを得ることが期待されます。助言がありますか?
私は、ubuntu server 10.04でPython 2.6.5、django 1.1を使用しています。
その他には、あまりにもその問題を持っているように見える:その問題のhttp://groups.google.com/group/django-users/browse_thread/thread/278e720f8b023877/ec8c2c1822a29d46?lnk=gst&q=decompress#ec8c2c1822a29d46 – Isaac
よります。http: //groups.google.com/group/django-users/browse_thread/thread/26bea21d91fb99a7/9a92e921c888a7b4?lnk=gst&q=decompress#9a92e921c888a7b4 – Isaac