Coverage for docs_src / tutorial / relation / foreignkey_relationship / tutorial000.py: 100%
50 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-07 08:37 +0000
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-07 08:37 +0000
1import os 1fabcde
2from typing import Optional 1fabcde
4from mongodb_odm import ( 1fabcde
5 ASCENDING,
6 Document,
7 IndexModel,
8 ODMObjectId,
9 Relationship,
10 apply_indexes,
11 connect,
12)
15class Country(Document): 1fabcde
16 name: str 1fabcde
19class Player(Document): 1fabcde
20 name: str 1fabcde
21 country_id: ODMObjectId 1fabcde
22 rating: Optional[int] = None 1fabcde
24 country: Optional[Country] = Relationship(local_field="country_id") 1fabcde
26 class ODMConfig(Document.ODMConfig): 1fabcde
27 indexes = [ 1fabcde
28 IndexModel([("country_id", ASCENDING)]),
29 ]
32def configuration(): 1fabcde
33 connect(os.environ.get("MONGO_URL", "mongodb://localhost:27017/testdb")) 1fabcde
34 apply_indexes() 1fabcde
37def insert_data(): 1fabcde
38 bangladesh = Country(name="Bangladesh").create() 1fabcde
40 Player(name="Jamal Bhuyan", country_id=bangladesh.id).create() 1fabcde
41 Player(name="Mohamed Emon Mahmud", country_id=bangladesh.id).create() 1fabcde
44def read_data(): 1fabcde
45 for player in Player.find(): 1fabcde
46 print(player) 1fabcde
47 print() 1fabcde
50def read_data_with_related_field(): 1fabcde
51 player_qs = Player.find() 1fabcde
52 for player in Player.load_related(player_qs): 1fabcde
53 print(player) 1fabcde
54 print() 1fabcde
57def read_related_data_of_specific_field(): 1fabcde
58 player_qs = Player.find() 1fabcde
59 for player in Player.load_related(player_qs, fields=["country"]): 1fabcde
60 print(player) 1fabcde
61 print() 1fabcde
64def read_related_data_for_single_obj(): 1fabcde
65 """Load related data in naive way"""
66 player = Player.find_one() 1fabcde
67 if player: 1fabcde
68 player.country = Country.find_one({"_id": player.country_id}) 1fabcde
69 print(player) 1fabcde
71 """Load related data with load_related""" 1abcde
72 player = Player.find_one() 1fabcde
73 if player: 1fabcde
74 player = Player.load_related([player])[0] 1fabcde
75 print(player) 1fabcde
78def main(): 1fabcde
79 configuration() 1fabcde
80 insert_data() 1fabcde
82 read_data() 1fabcde
83 read_data_with_related_field() 1fabcde
84 read_related_data_of_specific_field() 1fabcde
85 read_related_data_for_single_obj() 1fabcde
88if __name__ == "__main__": 1fabcde
89 main()