0001-variables-use-first-field-with-a-value-in-case-of-du.patch
tests/test_formdata.py | ||
---|---|---|
756 | 756 |
assert lazy_formdata.tracking_code == tracking_code.id |
757 | 757 | |
758 | 758 | |
759 |
def test_lazy_formdata_duplicated_varname(pub, variable_test_data): |
|
760 |
formdef = FormDef.select()[0] |
|
761 |
formdata = FormDef.select()[0].data_class().select()[0] |
|
762 |
lazy_formdata = LazyFormData(formdata) |
|
763 |
assert lazy_formdata.var.foo_foo == 'bar' |
|
764 | ||
765 |
formdef.fields.append(fields.StringField(id='100', label='string', varname='foo_foo')) |
|
766 |
formdef.store() |
|
767 |
formdata = FormDef.select()[0].data_class().select()[0] |
|
768 |
lazy_formdata = LazyFormData(formdata) |
|
769 |
assert lazy_formdata.var.foo_foo == 'bar' |
|
770 | ||
771 |
# add a value to 2nd field with foo_foo as varname |
|
772 |
formdata.data['100'] = 'baz' |
|
773 |
lazy_formdata = LazyFormData(formdata) |
|
774 |
assert lazy_formdata.var.foo_foo == 'bar' # 1st value |
|
775 | ||
776 |
# remove value from 1st field with foo_foo as varname |
|
777 |
formdata.data['0'] = None |
|
778 |
lazy_formdata = LazyFormData(formdata) |
|
779 |
assert lazy_formdata.var.foo_foo == 'baz' # 2nd value |
|
780 | ||
781 | ||
759 | 782 |
def test_lazy_formdata_queryset(pub, variable_test_data): |
760 | 783 |
lazy_formdata = variable_test_data |
761 | 784 |
data_class = lazy_formdata._formdef.data_class() |
wcs/variables.py | ||
---|---|---|
445 | 445 |
for field in self._fields: |
446 | 446 |
if not field.varname: |
447 | 447 |
continue |
448 |
if field.varname in self._varnames: |
|
449 |
# duplicated varname |
|
450 |
value = self._data.get(self._varnames[field.varname].id) |
|
451 |
if value or value is False: |
|
452 |
# previous field had a value (not None or the empty string), |
|
453 |
# stay on it. |
|
454 |
continue |
|
455 |
# else continue and update _varnames with new field reference. |
|
448 | 456 |
self._varnames[field.varname] = field |
449 | 457 |
return self._varnames |
450 | 458 | |
451 |
- |