Hi Mat
Betreff: [Zope-dev] z3c.form SequenceWIdget extract
Hi,
I am using z3c.form, which is complicated but a lot more flexible than the old zope.formlib. Thanks for building it.
Currently, I am having a problem with the SequenceWidget. Let me illustrate the scenario: I have a search-form with batching of the results - the links for the pages of the search contain the search parameters and the action-key as GET-parameters like this "search.html?form.widgets.text=foo&form.buttons.search=1".
With "normal" Widgets, this works perfectly well. But when my search-form contains a SequenceWidget, this approach breaks, because SequenceWidget depends on zope-functionality in some other place, which transforms paramters with a key-postfix of ":list" to a list of values (the postfix is appended to the parameter-name by the template).
Can you give a smaple ot the search string which you are using if it contains a sequence widget? I guess this string is wrong and this ends in none sequence data at the server side. If I'm right, now you are trying to convert this simple data string into a sequence, right? Try to build a sequence of values as: search.html?text=foo&text=bar that's the right way to send sequence data and will give you the result: text = ['foo', 'bar'] at the server side. Regards Roger Ineichen
The part of my application, that builds the query-string for the batch does however not have any knowledge about the widget-type of the parameters (that's intentionally to limit the dependencies to the form implementation).
This problem would not exist, if the extract-method of SequenceWidget would contain two additional lines of code:
def extract(self, default=interfaces.NOVALUE): """See z3c.form.interfaces.IWidget.""" if (self.name not in self.request and self.name+'-empty-marker' in self.request): return [] value = self.request.get(self.name, default) if value != default:
if not isinstance(value, (list, tuple)): value = [value]
for token in value: if token == self.noValueToken: continue try: self.terms.getTermByToken(token) except LookupError: return default return value
I (hope I) can work around this problem by subclassing SequenceWidget and overwrite the extract method, but I wonder, if this fix introduces some unknown problems and whether it can be included in the standard implementation.
Thanks,
Mat
-- Dipl. Inf. Matthias Lehmann Software- und Web-Development Käthe-Kollwitz-Straße 6 99734 Nordhausen
fon: +49 3631 470652 mobil: +49 170 5176774 eMail: info@matlehmann.de web: http://www.matlehmann.de