diff --git a/.coverage b/.coverage index f3e5faf..ed0ddb4 100644 Binary files a/.coverage and b/.coverage differ diff --git a/ormar/fields/foreign_key.py b/ormar/fields/foreign_key.py index 679830a..2448fde 100644 --- a/ormar/fields/foreign_key.py +++ b/ormar/fields/foreign_key.py @@ -87,6 +87,8 @@ class ForeignKeyField(BaseField): @classmethod def _construct_model_from_dict(cls, value: dict, child: "Model") -> "Model": + if len(value.keys()) == 1 and list(value.keys())[0] == cls.to.Meta.pkname: + value["__pk_only__"] = True model = cls.to(**value) cls.register_relation(model, child) return model diff --git a/tests/test_foreign_keys.py b/tests/test_foreign_keys.py index f1bd7fa..6463eb6 100644 --- a/tests/test_foreign_keys.py +++ b/tests/test_foreign_keys.py @@ -133,6 +133,8 @@ async def test_model_crud(): assert album1.pk == 1 assert album1.tracks is None + await Track.objects.create(album={"id": track.album.pk}, title="The Bird2", position=4) + @pytest.mark.asyncio async def test_select_related(): diff --git a/tests/test_more_reallife_fastapi.py b/tests/test_more_reallife_fastapi.py index 02233e6..31e31b9 100644 --- a/tests/test_more_reallife_fastapi.py +++ b/tests/test_more_reallife_fastapi.py @@ -61,13 +61,13 @@ def create_test_database(): @app.get("/items/", response_model=List[Item]) async def get_items(): items = await Item.objects.select_related("category").all() - return [item.dict() for item in items] + return items @app.post("/items/", response_model=Item) async def create_item(item: Item): - item = await Item.objects.create(**item.dict()) - return item.dict() + await item.save() + return item @app.post("/categories/", response_model=Category)