diff --git a/ormar/models/modelproxy.py b/ormar/models/modelproxy.py index 3835b41..4d5304b 100644 --- a/ormar/models/modelproxy.py +++ b/ormar/models/modelproxy.py @@ -70,6 +70,12 @@ class ModelTableProxy: f"model without pk set!" ) model_dict[field] = pk_value + elif isinstance(field_value, list): + targets = [target.get(target_pkname) for target in field_value] + if targets: + model_dict[field] = targets + else: + model_dict.pop(field) elif field_value: # nested dict model_dict[field] = field_value.get(target_pkname) else: diff --git a/tests/test_foreign_keys.py b/tests/test_foreign_keys.py index e7bf4e5..0559489 100644 --- a/tests/test_foreign_keys.py +++ b/tests/test_foreign_keys.py @@ -376,3 +376,16 @@ async def test_wrong_model_passed_as_fk(): with pytest.raises(RelationshipInstanceError): org = await Organisation.objects.create(ident="ACME Ltd") await Track.objects.create(album=org, title="Test1", position=1) + + +@pytest.mark.asyncio +async def test_bulk_update_model_with_children(): + async with database: + async with database.transaction(force_rollback=True): + album = await Album.objects.create(name="Test") + track = await Track.objects.create(album=album, title="Test1", position=1) + album.name = "Test2" + await Album.objects.bulk_update([album], columns=["name"]) + + updated_album = await Album.objects.get(id=album.id) + assert updated_album.name == "Test2"