fix parsing related models from dictionaries
This commit is contained in:
@ -193,6 +193,8 @@ class ForeignKey(BaseField):
|
|||||||
def expand_relationship(self, value, child):
|
def expand_relationship(self, value, child):
|
||||||
if isinstance(value, self.to):
|
if isinstance(value, self.to):
|
||||||
model = value
|
model = value
|
||||||
|
elif isinstance(value, dict):
|
||||||
|
model = self.to(**value)
|
||||||
else:
|
else:
|
||||||
model = self.to(**{self.to.__pkname__: value})
|
model = self.to(**{self.to.__pkname__: value})
|
||||||
|
|
||||||
|
|||||||
@ -315,7 +315,7 @@ class Model(tuple, metaclass=ModelMetaclass):
|
|||||||
|
|
||||||
objects = QuerySet()
|
objects = QuerySet()
|
||||||
|
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, *args, **kwargs) -> None:
|
||||||
self._orm_id = uuid.uuid4().hex
|
self._orm_id = uuid.uuid4().hex
|
||||||
self._orm_saved = False
|
self._orm_saved = False
|
||||||
self._orm_relationship_manager = RelationshipManager(self)
|
self._orm_relationship_manager = RelationshipManager(self)
|
||||||
|
|||||||
@ -16,6 +16,15 @@ database = databases.Database(DATABASE_URL, force_rollback=True)
|
|||||||
metadata = sqlalchemy.MetaData()
|
metadata = sqlalchemy.MetaData()
|
||||||
|
|
||||||
|
|
||||||
|
class Category(orm.Model):
|
||||||
|
__tablename__ = "cateries"
|
||||||
|
__metadata__ = metadata
|
||||||
|
__database__ = database
|
||||||
|
|
||||||
|
id = orm.Integer(primary_key=True)
|
||||||
|
name = orm.String(length=100)
|
||||||
|
|
||||||
|
|
||||||
class Item(orm.Model):
|
class Item(orm.Model):
|
||||||
__tablename__ = "users"
|
__tablename__ = "users"
|
||||||
__metadata__ = metadata
|
__metadata__ = metadata
|
||||||
@ -23,6 +32,7 @@ class Item(orm.Model):
|
|||||||
|
|
||||||
id = orm.Integer(primary_key=True)
|
id = orm.Integer(primary_key=True)
|
||||||
name = orm.String(length=100)
|
name = orm.String(length=100)
|
||||||
|
category = orm.ForeignKey(Category, nullable=True)
|
||||||
|
|
||||||
|
|
||||||
@app.post("/items/", response_model=Item)
|
@app.post("/items/", response_model=Item)
|
||||||
@ -34,9 +44,8 @@ client = TestClient(app)
|
|||||||
|
|
||||||
|
|
||||||
def test_read_main():
|
def test_read_main():
|
||||||
response = client.post("/items/", json={'name': 'test', 'id': 1})
|
response = client.post("/items/", json={'name': 'test', 'id': 1, 'category': {'name': 'test cat'}})
|
||||||
print(response.json())
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert response.json() == {'name': 'test', 'id': 1}
|
assert response.json() == {'category': {'id': None, 'name': 'test cat'}, 'id': 1, 'name': 'test'}
|
||||||
item = Item(**response.json())
|
item = Item(**response.json())
|
||||||
assert item.id == 1
|
assert item.id == 1
|
||||||
|
|||||||
Reference in New Issue
Block a user