mongoengine
mongoengine copied to clipboard
DynamicField doesn't save as a ListField
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]