1- from item .serializers import ItemSerializer
1+ from item .models import Item , DietaryPreference , Allergen
22import json
33from util .constants import eatery_is_cafe
44
@@ -7,6 +7,30 @@ class PopulateItemController:
77 def __init__ (self ):
88 self = self
99
10+ def create_item_with_m2m (self , category_id , name , dietary_preferences = None , allergens = None ):
11+ # handle many to many relationships
12+ item , created = Item .objects .get_or_create (
13+ category_id = category_id ,
14+ name = name ,
15+ defaults = {'base_price' : 0.0 }
16+ )
17+
18+ # handle dietary preferences
19+ if dietary_preferences :
20+ for pref_name in dietary_preferences :
21+ if pref_name :
22+ pref , _ = DietaryPreference .objects .get_or_create (name = pref_name )
23+ item .dietary_preferences .add (pref )
24+
25+ # handle allergens
26+ if allergens :
27+ for allergen_name in allergens :
28+ if allergen_name :
29+ allergen , _ = Allergen .objects .get_or_create (name = allergen_name )
30+ item .allergens .add (allergen )
31+
32+ return item
33+
1034 def generate_cafe_items (self , menu , json_eatery ):
1135 for json_item in json_eatery ["diningItems" ]:
1236 category_name = json_item ["category" ].strip ()
@@ -18,33 +42,32 @@ def generate_cafe_items(self, menu, json_eatery):
1842 dietary_preferences = json_item .get ("dietaryPreferences" , [])
1943 allergens = json_item .get ("allergens" , [])
2044
21- data = {"category" : category_id , "name" : json_item ["item" ], "dietary_preferences" : dietary_preferences , "allergens" : allergens }
22- try :
23- item = ItemSerializer (data = data )
24- if item .is_valid ():
25- item .save ()
26- else :
27- print (item .errors )
28- except Exception as e :
29- print (f"Error saving item: { e } " )
30- print (f"Data: { data } " )
31-
45+ self .create_item_with_m2m (
46+ category_id = category_id ,
47+ name = json_item ["item" ],
48+ dietary_preferences = dietary_preferences ,
49+ allergens = allergens
50+ )
3251
3352 def generate_dining_hall_items (self , menu , json_event , json_eatery ):
3453 json_menus = json_event ["menu" ]
3554 for json_menu in json_menus :
3655 category_name = json_menu ["category" ].strip ()
37- category_id = menu [category_name ]
56+ try :
57+ category_id = menu [category_name ]
58+ except KeyError :
59+ continue
3860
3961 for json_item in json_menu ["items" ]:
4062 dietary_preferences = json_item .get ("dietaryPreferences" , [])
4163 allergens = json_item .get ("allergens" , [])
42- data = {"category" : category_id , "name" : json_item ["item" ], "dietary_preferences" : dietary_preferences , "allergens" : allergens }
43- item = ItemSerializer (data = data )
44- if item .is_valid ():
45- item .save ()
46- else :
47- print (item .errors )
64+
65+ self .create_item_with_m2m (
66+ category_id = category_id ,
67+ name = json_item ["item" ],
68+ dietary_preferences = dietary_preferences ,
69+ allergens = allergens
70+ )
4871
4972 def process (self , categories_dict , json_eateries ):
5073 with open (
0 commit comments