I’m curious about how grist devs would approach this, because I’ve dealt with similar situations a bit myself, but here’s one solution to your immediate question:
First, in the $AllRecipes column in TableMealPlan, I would clean up the [blank] items by changing the formula to the following:
dishes = list(($Entree, $Side1, $Side2, $Dessert, $Drink))
recipes = [x for x in dishes if x]
Next, on the Events table, you could use the following formula for $AllRecipes:
meals = list(TableMealPlan.lookupRecords(Event=$id))
rs = list()
for x in meals:
That seems to work for me, and I can set that column to be a Reference List for TableRecipes showing column Name. Then setting the Ingredients widget to select by Events • All Recipes shows the ingredients for all of the recipes.
However, this does not account for a situation where you have the same recipe used in two meals (e.g. serving bacon at dinner in addition to breakfast on Trip A). Bacon will show up twice on the AllRecipes reference list for the Trip A event, but it will not update the amount or show up twice on the ingredients list because it is the same recipe. I tried putting together a solution for that using a couple summary tables: Meal Planning (working copy) (copy) - Grist
I imagine there may be a simpler way.