fix setting new related model just from dict with pkname

This commit is contained in:
collerek
2020-08-23 13:15:04 +02:00
parent 53384879a9
commit 806fe9b63e
4 changed files with 7 additions and 3 deletions

BIN
.coverage

Binary file not shown.

View File

@ -87,6 +87,8 @@ class ForeignKeyField(BaseField):
@classmethod @classmethod
def _construct_model_from_dict(cls, value: dict, child: "Model") -> "Model": 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) model = cls.to(**value)
cls.register_relation(model, child) cls.register_relation(model, child)
return model return model

View File

@ -133,6 +133,8 @@ async def test_model_crud():
assert album1.pk == 1 assert album1.pk == 1
assert album1.tracks is None assert album1.tracks is None
await Track.objects.create(album={"id": track.album.pk}, title="The Bird2", position=4)
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_select_related(): async def test_select_related():

View File

@ -61,13 +61,13 @@ def create_test_database():
@app.get("/items/", response_model=List[Item]) @app.get("/items/", response_model=List[Item])
async def get_items(): async def get_items():
items = await Item.objects.select_related("category").all() items = await Item.objects.select_related("category").all()
return [item.dict() for item in items] return items
@app.post("/items/", response_model=Item) @app.post("/items/", response_model=Item)
async def create_item(item: Item): async def create_item(item: Item):
item = await Item.objects.create(**item.dict()) await item.save()
return item.dict() return item
@app.post("/categories/", response_model=Category) @app.post("/categories/", response_model=Category)