|
18 | 18 | )
|
19 | 19 | from tortoise.contrib import test
|
20 | 20 | from tortoise.contrib.test.condition import NotIn
|
21 |
| -from tortoise.exceptions import FieldError, NoValuesFetched |
| 21 | +from tortoise.exceptions import FieldError, NoValuesFetched, OperationalError |
22 | 22 | from tortoise.functions import Count, Trim
|
23 | 23 |
|
24 | 24 |
|
@@ -479,3 +479,25 @@ async def test_o2o_fk_model_with_m2m_field(self):
|
479 | 479 | self.assertEqual(await obj.nodes.all(), [])
|
480 | 480 | await obj.nodes.add(node)
|
481 | 481 | self.assertEqual(await obj.nodes.all(), [node])
|
| 482 | + |
| 483 | + async def test_reverse_relation_create_fk(self): |
| 484 | + tournament = await Tournament.create(name="Test Tournament") |
| 485 | + self.assertEqual(await tournament.events.all(), []) |
| 486 | + |
| 487 | + event = await tournament.events.create(name="Test Event") |
| 488 | + |
| 489 | + await tournament.fetch_related("events") |
| 490 | + |
| 491 | + self.assertEqual(len(tournament.events), 1) |
| 492 | + self.assertEqual(event.name, "Test Event") |
| 493 | + self.assertEqual(event.tournament_id, tournament.id) |
| 494 | + self.assertEqual(tournament.events[0].event_id, event.event_id) |
| 495 | + |
| 496 | + async def test_reverse_relation_create_fk_errors_for_unsaved_instance(self): |
| 497 | + tournament = Tournament(name="Unsaved Tournament") |
| 498 | + |
| 499 | + # Should raise OperationalError since tournament isn't saved |
| 500 | + with self.assertRaises(OperationalError) as cm: |
| 501 | + await tournament.events.create(name="Test Event") |
| 502 | + |
| 503 | + self.assertIn("hasn't been instanced", str(cm.exception)) |
0 commit comments