mongoengine icon indicating copy to clipboard operation
mongoengine copied to clipboard

DynamicField doesn't save as a ListField

Open dssecret opened this issue 2 years ago • 0 comments

Updating a DynamicField of a list does not update using .save() or .cascade_save() when the list is updated using .append().

System Info

Ubuntu 20.04 LTS MongoDB v6.0.4 mongoengine v0.26.0 pymongo v3.12.3

Reproducible Example
class ExampleModel(DynamicDocument):
    value = DynamicField()
Actual Result
>>> example = ExampleModel(value=[])
>>> example.value.append(1)
>>> example.save()
<ExampleModel: ExampleModel object>
>>> example.value
[1]
>>> example.reload()
<ExampleModel: ExampleModel object>
>>> example.value
[]
Expected Result
>>> example = ExampleModel(value=[])
>>> example.value.append(1)
>>> example.save()
<ExampleModel: ExampleModel object>
>>> example.value
[1]
>>> example.reload()
<ExampleModel: ExampleModel object>
>>> example.value
[1]
Work-Around
>>> example = ExampleModel(value=[])
>>> example.value.append(1)
>>> example.save()
<ExampleModel: ExampleModel object>
>>> a = list(example.value)
>>> a.append(1)
>>> example.value = a
>>> example.save()
>>> example.value
[1]
>>> example.reload()
<ExampleModel: ExampleModel object>
>>> example.value
[1]

dssecret avatar Mar 10 '23 01:03 dssecret