Ich versuche, ein MultiValueField für IP-Adresse/Domain Name Einträge zu implementieren. Es funktioniert wie erwartet für die Eingabe von Daten. Mein Problem ist, dass das Feld IP-Adresse/Domänenname leer bleibt, wenn ich das an bestimmte Daten gebundene Formular anzeigen möchte. Alle anderen Felder sind mit den gewünschten Daten gefüllt. Wenn ich ein normales CharField verwende, bekomme ich die Daten, die ich erwarten würde. Aber es funktioniert nicht mit meinem benutzerdefinierten Feld. Ich habe es auf die Tatsache zurückverfolgt, dass mein benutzerdefiniertes MultiWidget seine Dekomprimierungsmethode nicht aufruft.django multiwidget Unterklasse nicht aufrufen dekomprimieren()
Hier ist mein Feld:
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)
Und hier ist mein widget:
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)
Das Ganze (in einem größeren Kontext) als
self.fields['access_IPs'] = accessIPField()
nun aufgerufen wird als Sie können sehen, ich habe eine print-Anweisung in meine Komprimierungsmethode geschrieben, und ich bekomme diese Anweisung nie zu sehen. Auch, wenn ich compress in etwas wie foobar umbenenne, würde ich (laut dem Django-Code für MultiWidget) erwarten, NotImplementedError zu bekommen, was nicht der Fall ist. Irgendwelche Vorschläge?
Ich benutze Python 2.6.5, Django 1.1 auf Ubuntu-Server 10.04.
Andere scheinen, dieses Problem zu haben: http://groups.google.com/group/django-users/browse_thread/thread/278e720f8b023877/ec8c2c1822a29d46?lnk=gst&q=decompress#ec8c2c1822a29d46 – Isaac
mehr dieses Problem: http: //groups.google.com/group/django-users/browse_thread/thread/26bea21d91fb99a7/9a92e921c888a7b4?lnk=gst&q=decompress#9a92e921c888a7b4 – Isaac