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

1import os 1fabcde

2from typing import Optional 1fabcde

3 

4from mongodb_odm import ( 1fabcde

5 ASCENDING, 

6 Document, 

7 IndexModel, 

8 ODMObjectId, 

9 Relationship, 

10 apply_indexes, 

11 connect, 

12) 

13 

14 

15class Country(Document): 1fabcde

16 name: str 1fabcde

17 

18 

19class Player(Document): 1fabcde

20 name: str 1fabcde

21 country_id: ODMObjectId 1fabcde

22 rating: Optional[int] = None 1fabcde

23 

24 country: Optional[Country] = Relationship(local_field="country_id") 1fabcde

25 

26 class ODMConfig(Document.ODMConfig): 1fabcde

27 indexes = [ 1fabcde

28 IndexModel([("country_id", ASCENDING)]), 

29 ] 

30 

31 

32def configuration(): 1fabcde

33 connect(os.environ.get("MONGO_URL", "mongodb://localhost:27017/testdb")) 1fabcde

34 apply_indexes() 1fabcde

35 

36 

37def insert_data(): 1fabcde

38 bangladesh = Country(name="Bangladesh").create() 1fabcde

39 

40 Player(name="Jamal Bhuyan", country_id=bangladesh.id).create() 1fabcde

41 Player(name="Mohamed Emon Mahmud", country_id=bangladesh.id).create() 1fabcde

42 

43 

44def read_data(): 1fabcde

45 for player in Player.find(): 1fabcde

46 print(player) 1fabcde

47 print() 1fabcde

48 

49 

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

55 

56 

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

62 

63 

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

70 

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

76 

77 

78def main(): 1fabcde

79 configuration() 1fabcde

80 insert_data() 1fabcde

81 

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

86 

87 

88if __name__ == "__main__": 1fabcde

89 main()