On Mon, Jul 27, 2009 at 2:05 PM, Paul McNett<[email protected]> wrote:
> Miguel Lopes wrote:
>> This case maybe special because the form is loaded from a cdxml file.
>> Note that properties are not being set in the class designer (as per
>> my email above).
>>
>> In this case dropdownList properties are being set in the afterInitAll
>> cdxml form method. The code is:
>>
>> def afterInitAll(self):
>> _valueListProvider = self.Application.getAppInfo('valueListProvider')
>> vlKeys, vlChoices =
>> _valueListProvider.getKeysAndChoices('contact_title')
>> dropDown = self.getObjectByRegID("dlTitle")
>> dropDown.DataSource="contact"
>> dropDown.DataField="title_id"
>> dropDown.Keys = vlKeys
>> dropDown.Choices = vlChoices
>> dropDown.ValueMode="Key" # if both commented runs ok - but not
>> in 'key' valueMode
>> dropDown.Value = vlKeys[0] # if both commented runs ok - but
>> not in 'key' valueMode
>
> What happens with:
>
> def afterInitAll(self):
> ...
> dropDown.Keys = vlKeys
> dropDown.Choices = vlChoices
> dropDown.ValueMode = "key"
> print self.getBizobj("contact")
> dropDown.DataSource = "contact"
> dropDown.DataField = "title_id"
> print "choices", dropDown.Choices
> print "keys", dropDown.Keys
>
>
> After typing the above I just re-read your original post, and see that
> the offending line is where you set dropDown.Value = vlKeys[0]. You
> generally don't want to do that, because the Value is coming from the
> bizobj and you are setting it to an arbitrary value which would get
> saved to the bizobj.
The dropDown.ValueMode = "key" has also been an offending line from
the beginning.
> However, you should be able to do that if you really want to, if the key
> is present in the choices. Otherwise, you'll get the error you
> originally reported. So, please still run with the above changes and
> let's see what the choices and keys are.
>
> Paul
>
The print is:
<biz.ContactBizobj.ContactBizobj (baseclass dabo.biz.dBizobj, id:439330288)>
choices [u'Sr.', u'Sr.\xaa', u'Arq.', u'Arq.\xaa', u'Eng.',
u'Eng.\xaa', u'Dr.', u'Dr.\xaa']
keys [25, 24, 23, 22, 21, 20, 19, 18]
The traceback is the same as before:
Traceback (most recent call last):
File
"//usr/local/lib/wxPython-unicode-2.8.9.2/lib/python2.5/site-packages/wx-2.8-mac-unicode/wx/_misc.py",
line 1342, in Notify
self.notify()
File
"//usr/local/lib/wxPython-unicode-2.8.9.2/lib/python2.5/site-packages/wx-2.8-mac-unicode/wx/_core.py",
line 14676, in Notify
self.result = self.callable(*self.args, **self.kwargs)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dForm.py",
line 123, in __update
super(BaseForm, self).update()
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
line 1244, in update
self.raiseEvent(dEvents.Update)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
line 949, in raiseEvent
super(dPemMixin, self).raiseEvent(eventClass, nativeEvent, *args, **kwargs)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/lib/eventMixin.py",
line 93, in raiseEvent
bindingFunction(event)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
line 1225, in __onUpdate
self.update()
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
line 1244, in update
self.raiseEvent(dEvents.Update)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
line 949, in raiseEvent
super(dPemMixin, self).raiseEvent(eventClass, nativeEvent, *args, **kwargs)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/lib/eventMixin.py",
line 93, in raiseEvent
bindingFunction(event)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
line 1225, in __onUpdate
self.update()
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/dDataControlMixinBase.py",
line 97, in update
self.__dataUpdate()
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/dDataControlMixinBase.py",
line 114, in __dataUpdate
self.Value = src.getFieldVal(self.DataField)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dControlItemMixin.py",
line 380, in _setValue
self.KeyValue = value
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dControlItemMixin.py",
line 239, in _setKeyValue
raise ValueError(_("Trying to set %s.Value to these invalid
selections: %s") % (self.Name, invalidSelections))
ValueError: Trying to set dDropdownList1.Value to these invalid selections: [0]
If we run your code without the line:
dropDown.ValueMode = "key"
Then there is no exception raise. But, as expected, the value of the
"title_id" field does not get recorded to the db, because it is a
string, not an integer. So there is something wrong with setting
ValueMode.
HTH,
Miguel
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-users
Searchable Archives: http://leafe.com/archives/search/dabo-users
This message:
http://leafe.com/archives/byMID/[email protected]