Skip to content

Commit a5bb80f

Browse files
authored
Fix backward_relations in PydanticMeta (#1815)
1 parent 433e302 commit a5bb80f

File tree

4 files changed

+43
-7
lines changed

4 files changed

+43
-7
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Added
1818
Fixed
1919
^^^^^
2020
- Fixed a deadlock in three level nested transactions (#1810)
21+
- Fix backward_relations in PydanticMeta (#1814)
2122

2223
0.22
2324
====

tests/contrib/test_pydantic.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
Employee,
1010
EnumFields,
1111
Event,
12+
ModelTestPydanticMetaBackwardRelations1,
13+
ModelTestPydanticMetaBackwardRelations2,
1214
IntFields,
1315
JSONFields,
1416
Reporter,
@@ -33,11 +35,17 @@ async def asyncSetUp(self) -> None:
3335
self.Tournament_Pydantic = pydantic_model_creator(Tournament)
3436
self.Team_Pydantic = pydantic_model_creator(Team)
3537
self.Address_Pydantic = pydantic_model_creator(Address)
38+
self.ModelTestPydanticMetaBackwardRelations1_Pydantic = pydantic_model_creator(
39+
ModelTestPydanticMetaBackwardRelations1
40+
)
41+
self.ModelTestPydanticMetaBackwardRelations2_Pydantic = pydantic_model_creator(
42+
ModelTestPydanticMetaBackwardRelations2
43+
)
3644

3745
class PydanticMetaOverride:
3846
backward_relations = False
3947

40-
self.Event_Pydantic_non_backward = pydantic_model_creator(
48+
self.Event_Pydantic_non_backward_from_override = pydantic_model_creator(
4149
Event, meta_override=PydanticMetaOverride, name="Event_non_backward"
4250
)
4351

@@ -54,15 +62,24 @@ class PydanticMetaOverride:
5462
await self.event2.participants.add(self.team1, self.team2)
5563
self.maxDiff = None
5664

57-
async def test_backward_relations(self):
65+
async def test_backward_relations_with_meta_override(self):
5866
event_schema = copy.deepcopy(dict(self.Event_Pydantic.model_json_schema()))
59-
event_non_backward_schema = copy.deepcopy(
60-
dict(self.Event_Pydantic_non_backward.model_json_schema())
67+
event_non_backward_schema_by_override = copy.deepcopy(
68+
dict(self.Event_Pydantic_non_backward_from_override.model_json_schema())
6169
)
6270
self.assertTrue("address" in event_schema["properties"])
63-
self.assertFalse("address" in event_non_backward_schema["properties"])
71+
self.assertFalse("address" in event_non_backward_schema_by_override["properties"])
6472
del event_schema["properties"]["address"]
65-
self.assertEqual(event_schema["properties"], event_non_backward_schema["properties"])
73+
self.assertEqual(event_schema["properties"], event_non_backward_schema_by_override["properties"])
74+
75+
async def test_backward_relations_with_pydantic_meta(self):
76+
test_model1_schema = self.ModelTestPydanticMetaBackwardRelations1_Pydantic.model_json_schema()
77+
test_model2_schema = self.ModelTestPydanticMetaBackwardRelations2_Pydantic.model_json_schema()
78+
self.assertTrue("threes" in test_model2_schema["properties"])
79+
self.assertFalse("threes" in test_model1_schema["properties"])
80+
del test_model2_schema["properties"]["threes"]
81+
self.assertEqual(test_model2_schema["properties"], test_model1_schema["properties"])
82+
print(test_model2_schema)
6683

6784
def test_event_schema(self):
6885
self.assertEqual(

tests/testmodels.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,24 @@ def __str__(self):
126126
return self.name
127127

128128

129+
class ModelTestPydanticMetaBackwardRelations1(Model):
130+
class PydanticMeta:
131+
backward_relations = False
132+
133+
134+
class ModelTestPydanticMetaBackwardRelations2(Model):
135+
...
136+
137+
138+
class ModelTestPydanticMetaBackwardRelations3(Model):
139+
one: fields.ForeignKeyRelation[ModelTestPydanticMetaBackwardRelations1] = fields.ForeignKeyField(
140+
"models.ModelTestPydanticMetaBackwardRelations1", related_name="threes"
141+
)
142+
two: fields.ForeignKeyRelation[ModelTestPydanticMetaBackwardRelations2] = fields.ForeignKeyField(
143+
"models.ModelTestPydanticMetaBackwardRelations2", related_name="threes"
144+
)
145+
146+
129147
class Node(Model):
130148
name = fields.CharField(max_length=10)
131149

tortoise/contrib/pydantic/descriptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def get_param_from_pydantic_meta(attr: str, default: Any) -> Any:
113113
exclude = tuple(get_param_from_pydantic_meta("exclude", default_meta.exclude))
114114
computed = tuple(get_param_from_pydantic_meta("computed", default_meta.computed))
115115
backward_relations = bool(
116-
get_param_from_pydantic_meta("backward_relations_raw", default_meta.backward_relations)
116+
get_param_from_pydantic_meta("backward_relations", default_meta.backward_relations)
117117
)
118118
max_recursion = int(
119119
get_param_from_pydantic_meta("max_recursion", default_meta.max_recursion)

0 commit comments

Comments
 (0)