Permalänk
Medlem

Hantera ingredienser i recept

Jag är trött på att göra en matsedel och shoppinglista så jag vill bygga en webbapplikation som gör detta åt mig.
Tanken är att fylla en databas med recept jag brukar laga, och sedan slumpa ut ett antal recept från denna utifrån vissa kriterier (minst x lättlagade, minst y vegan, minst z innehåller potatis). Så långt är det lugnt.

Sedan får jag problem. Jag lyckas inte klura ut hur jag ska hantera ingredienserna på ett smidigt sätt.
Jag vill kunna välja antal portioner och att ingredienserna automatiskt skalas upp eller ned.
Jag vill också att den ska göra en shoppinglista åt mig. Om två recept innehåller majonäs så ska den slå ihop x dl majonäs + y msk majonäs till z dl majonäs.

Lagrar jag det som text ("0.5dl mjölk, 100g mjöl") har jag inget smidigt sätt att skala dessa med portioner eller slå ihop två recept.
Lagrar jag ingredienserna i en egen tabell och refererar till dem från recepten förstår jag inte hur jag ska hantera volymerna. Jag kan få ut att en pannkaka innehåller ägg, mjöl, mjölk, men var hanterar jag mängden?

Finns det något smartare sätt jag inte tänker på?

Jag skriver allting i Python/Flask.

Permalänk
Medlem
Skrivet av Kamouflage:

Jag är trött på att göra en matsedel och shoppinglista så jag vill bygga en webbapplikation som gör detta åt mig.
Tanken är att fylla en databas med recept jag brukar laga, och sedan slumpa ut ett antal recept från denna utifrån vissa kriterier (minst x lättlagade, minst y vegan, minst z innehåller potatis). Så långt är det lugnt.

Sedan får jag problem. Jag lyckas inte klura ut hur jag ska hantera ingredienserna på ett smidigt sätt.
Jag vill kunna välja antal portioner och att ingredienserna automatiskt skalas upp eller ned.
Jag vill också att den ska göra en shoppinglista åt mig. Om två recept innehåller majonäs så ska den slå ihop x dl majonäs + y msk majonäs till z dl majonäs.

Lagrar jag det som text ("0.5dl mjölk, 100g mjöl") har jag inget smidigt sätt att skala dessa med portioner eller slå ihop två recept.
Lagrar jag ingredienserna i en egen tabell och refererar till dem från recepten förstår jag inte hur jag ska hantera volymerna. Jag kan få ut att en pannkaka innehåller ägg, mjöl, mjölk, men var hanterar jag mängden?

Finns det något smartare sätt jag inte tänker på?

Jag skriver allting i Python/Flask.

Jag tänker mig att du borde ha en kopplingstabell mellan recepttabellen och ingredienstabellen och att du för den specifika kopplingen anger volymen som gäller för den ingrediensen i just det receptet.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

Byt ut textfilen mot ett excelblad? Så har du bara en extra kolumn bredvid ingredienserna där mängden framgår.

Väldigt enkelt att läsa/skriva Excel med Python.

(Annars skulle nog de flesta köra på en databas...)

Visa signatur

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Permalänk
Medlem
Skrivet av evil penguin:

Jag tänker mig att du borde ha en kopplingstabell mellan recepttabellen och ingredienstabellen och att du för den specifika kopplingen anger volymen som gäller för den ingrediensen i just det receptet.

En kopplingstabell? Alltså totalt tre tabeller? En med receptet, en med ingrediensen och en med.. volymen?

Jag har ett recept (pannkaka) som refererar till tre ingredienser (mjöl, mjölk, ägg). Jag förstår inte riktigt hur jag ska göra den sista kopplingen. Vi pratar kanske lite praktisk SQL-kunskap som saknas här..

--

En annan lösning är kanske att göra en tabell med ingredienser inklusive mängd och hantera olika mycket mjölk som olika ingredienser.

+----+-------+-------+ | Id | Namn | antal | +----+-------+-------+ | 1 | Mjölk | 15 | | 2 | Mjölk | 50 | | 3 | Ägg | 4 | | 4 | Mjöl | 200 | +----+-------+-------+

Det kommer ju bli lite många "Mjölk" och jag kommer behöva minnas att mjölk är centiliter och ägg är stycken när jag lägger in nya recept. Känns osnyggt.

Permalänk
Medlem

Mjölk är en artikel och mängden blir ju då kvantitet, ett fält skulle kunna vara kvantitet typ(tex gram eller dl), i receptet blir kvantitet + artikel = en rad i receptet. I shoppinglistan adderas receptrader med samma artikel.. osv. Json objekt är väl det som jag hade använt mig av. Enkelt att hantera med javascript/populära webramverk.

Edit, såg inte först att du använde python. Antar att det finns hantering där för json. I sql kan man göra ungefär samma.

Permalänk
Medlem
Skrivet av freron:

Mjölk är en artikel och mängden blir ju då kvantitet, ett fält skulle kunna vara kvantitet typ(tex gram eller dl), i receptet blir kvantitet + artikel = en rad i receptet. I shoppinglistan adderas receptrader med samma artikel.. osv. Json objekt är väl det som jag hade använt mig av. Enkelt att hantera med javascript/populära webramverk.

Edit, såg inte först att du använde python. Antar att det finns hantering där för json. I sql kan man göra ungefär samma.

Min huvudvärk är alltså främst hur jag ska lagra datan på ett lämpligt sätt.

Tänker du att jag ska lagra varje recept som en enskild fil och sedan öppna dessa hundratals filer (hundratals recept) och jaga runt i innehållet om jag t.ex. vill hitta alla recept som innehåller falukorv?

Eller låta en kolumn i tabellen recept vara en json som innehåller ingredienserna+mängderna?

Permalänk
Hedersmedlem
Skrivet av Kamouflage:

Min huvudvärk är alltså främst hur jag ska lagra datan på ett lämpligt sätt.

Tänker du att jag ska lagra varje recept som en enskild fil och sedan öppna dessa hundratals filer (hundratals recept) och jaga runt i innehållet om jag t.ex. vill hitta alla recept som innehåller falukorv?

Eller låta en kolumn i tabellen recept vara en json som innehåller ingredienserna+mängderna?

Om du ska lagra recepten var för sig som dokument (t.ex. i en NoSQL-databas av något slag som t.ex. MongoDB, eller ett filsystem) så kommer du behöva någon slags sökmotor/index, som indexerar alla recept utifrån vilka ingredienser de innehåller. Den typen av index verkar gå att skapa med MongoDB.

Känns spontant som att en SQL-databas är lite fel verktyg för syftet. SQL-databaser har en massa bra egenskaper som helt enkelt inte är relevanta för en receptdatabas. Det går säkert att göra det du beskriver, men det känns som att det blir enklare att hantera recept, som är ett slags dokument, i en dokument-orienterad databas som t.ex. MongoDB.

Permalänk
Medlem

Det här var min spontana tanke: http://sqlfiddle.com/#!7/bb83e7/13 Ser ut att vara samma som @evil penguin föreslog också.

create table ingredients ( name text, unit text ); insert into ingredients values ("mjölk", "dl"), ("mjöl", "g"), ("socker", "g"), ("ägg", "st"); create table recipes ( title text ); insert into recipes values ("pannkakor"), ("sockerkaka"); -- sockerkaka är en fullt funktionell middag create table rels ( recipe int, ingredient int, amount float ); insert into rels values (1, 1, 2), (1, 2, 100), (1, 4, 1), (2, 2, 120), (2, 3, 150), (2, 4, 2);

schema

select * from rels join ingredients on ingredients.rowid = rels.ingredient join recipes on recipes.rowid = rels.recipe where recipes.title = "pannkakor";

recipe

ingredient

amount

name

unit

title

1

1

2

mjölk

dl

pannkakor

1

2

100

mjöl

g

pannkakor

1

4

1

ägg

st

pannkakor

litar inte på att sqlfiddle.com är särskilt beständig
Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem
Skrivet av pv2b:

Om du ska lagra recepten var för sig som dokument (t.ex. i en NoSQL-databas av något slag som t.ex. MongoDB, eller ett filsystem) så kommer du behöva någon slags sökmotor/index, som indexerar alla recept utifrån vilka ingredienser de innehåller. Den typen av index verkar gå att skapa med MongoDB.

Aldrig kört MongoDB så du har kanske en poäng i att SQL är fel verktyg. När allt man har är en hammare..
Poängen med MongoDB är alltså att jag på ett praktiskt sätt kan lagra recepten som ett JSON-dokument? Det känns ju som en väldigt simpel lösning på problemet. Nackdelen är att jag måste lära mig MongoDB dock..

Skrivet av LemonIllusion:

Det här var min spontana tanke: http://sqlfiddle.com/#!7/bb83e7/13 Ser ut att vara samma som @evil penguin föreslog också.

Ah! Jag fattar. Definitivt mina SQL-kunskaper som inte hängde med från början. Självklart när man ser det..
Tack för morgondagens middagstips också!

--

Jag tror @evil penguin och @LemonIllusion tar hem segern i frågesporten, tätt följda av @pv2b och @freron om jag orkar lära mig MongoDB.

Tack allihopa!

Permalänk
Hedersmedlem
Skrivet av Kamouflage:

Nackdelen är att jag måste lära mig MongoDB dock..

Men vilken tråkig inställning. Det är ju kul och utvecklande att lära sig ny teknik, och särskilt om nya paradigmer.

Jag är inte direkt en expert på MongoDB heller, jag har sett det några enstaka gånger, men jag tyckte att sättet det fungerar på verkar väldigt naturligt utifrån vad du är ute efter.

Permalänk
Medlem
Skrivet av pv2b:

Men vilken tråkig inställning. Det är ju kul och utvecklande att lära sig ny teknik, och särskilt om nya paradigmer.

Det är en nackdel på så sätt att jag är hungrig *nu*. Annars mest spännande..

Permalänk
Avstängd

Låter som ett rätt krångligt sätt att få fram en inköpslista och en matlista för veckan men jag förstår tanken och att om man nu gillar att programmera har något att leka med. Om du nu vill göra ditt system så skulle jag lägga in alla recept med en portion och försöka skriva alla varor i antingen dl eller gram för att få färre varianter.
Ska man sen ha ett 4 portioner så får systemet helt enkelt multiplicera mängden. Bra också att ha en grundlista som man alltid utgår från exempelvis att man kanske alltid vill ha 2l mjölk hemma eller liknande.
Du behöver också väga alla matvaror du har hemma och skriva in i systemet så det vet vad som redan finns och inte tar med på inköpslistan. Bara för att du behöver 3dl majonnäs så behöver du kanske inte köpa en ny burk om du redan har det hemma.

Tänk också på att allt övrigt som tas bort från matvarorna hemma måste läggas in så inte någon helt plötsligt gjort slut på en havregrynet när man gjort gröt som ett bonusmellanmål varje dag i en månad och sen behöver man havregrynet och det då inte finns något. Du skulle behöva en streckkodsläsare så du kan scanna alla varor man tar och stoppar in i systemet också, men jag säljer dessa i jobbet

Tasteline ser ut att ha något liknande som du är ute efter.
https://www.tasteline.com/matplaneraren/

Landleys kök har också något liknande med fler möjligheter.
https://www.landleyskok.se/receptgeneratorn

I vår familj, bara jag och sambon så skriver man upp saker på en inköpslista så fort de börjar ta slut eller är slut beroende på vad det är för matvara. När man sen äter middag på onsdagen eller så kollar man den lokala handlarens app och ser vad det finns för rabatter i butiken och skriver en matlista efter det och givetvis vad man är sugen på. Inte alltid detta sammanfaller men det är väl inga problem.
Sen skriver man bara in de matvaror som behövs specifikt för de maträtter som ska lagas. Sen åker jag oftast iväg innan jobbet på torsdagen eller fredagen runt sjutiden på morgonen och handlar allt då det är lugnt och skönt i butiken.

Kan tilläggas att matlistan sen kan ändras under veckans gång då det ibland blir rester från dagen innan eller att man inte alls är sugen på det man planerat. Som sagt så är detta säkerligen mycket enklare i mitt liv då vi inte har några barn men tycker ändå att systemet är väldigt enkelt och smidigt.

Lycka till

Visa signatur

Chassi: Fractal Design Define R3 Black, Mobo: ASUS Z170 Pro Gaming, CPU: Intel i7 6700K, kylning CM Hyper 212 EVO, RAM: 32 GB Hyper X 3000 mhz, GPU: Nvidia MSI 1080 Gaming X, PSU: XFX Core Edition Pro 750W, Mus: Logitech G700, Tgb: Corsair Raptor K30, OS: Win10

Permalänk

kolla på www.matlistan.se finns som app på telefonen (både ios och android) kan importera recept från sidor (bara testat ett, men från www.koket.se och det funkade) kanske funkar som du vill?
har inte kollat på om den slumpar fram recept åt dig, men kan vara nått på vägen om inte annat?

Visa signatur

|Dator: | Phantek P400S | Ryzen 5900X | X570 Aorus Elite | RTX 3080 Ventus OC | Corsair 64gb DDR4 | x2 970 EVO 1Tb | Corsair HX 850i | AC Liquid Freezer II 280 |

Permalänk
Medlem

Du kan inte bidra till tex https://hay-kot.github.io/mealie/ och lägga in de saknade funktionerna?

Permalänk
Medlem
Skrivet av Stefflo:

Låter som ett rätt krångligt sätt att få fram en inköpslista och en matlista för veckan men jag förstår tanken och att om man nu gillar att programmera har något att leka med.
[...]
Du behöver också väga alla matvaror du har hemma och skriva in i systemet så det vet vad som redan finns och inte tar med på inköpslistan. Bara för att du behöver 3dl majonnäs så behöver du kanske inte köpa en ny burk om du redan har det hemma.

Ja jag förstår ju att problemet egentligen är 'löst', det är mest för nöjets skull.

Befintliga saker behöver jag inte föra in. Jag har i alla tider köpt efter recept så jag har mer eller mindre exakt de färskvaror jag behöver för varje vecka, och har 'dubbelt' av torrvaror så jag helt enkelt köper en ny pasta när den ena tar slut. Men du har en poäng - lite måste jag fortfarande tänka själv

Citat:

Tasteline ser ut att ha något liknande som du är ute efter.
https://www.tasteline.com/matplaneraren/

Landleys kök har också något liknande med fler möjligheter.
https://www.landleyskok.se/receptgeneratorn

Det fungerar lite sisådär eftersom man är bunden till en sida per generator, och jag har recept sparade från överallt - inklusive farmor. Sen tänker jag mig att min sida ska generera färdiga länkar till Willys onlineshopping så det blir enklare att göra klart min färdigplockade matkasse där. Lättare att anpassa en egen efter rätt låga krav men specifika behov helt enkelt!

Skrivet av alex_farnstrom:

kolla på www.matlistan.se finns som app på telefonen (både ios och android) kan importera recept från sidor (bara testat ett, men från www.koket.se och det funkade) kanske funkar som du vill?
har inte kollat på om den slumpar fram recept åt dig, men kan vara nått på vägen om inte annat?

Jag har inte testat, men att den bara finns till mobil är en nackdel. Jag vill göra min onlineshopping på datorn för att de flesta butikers mobilsidor är lite sisådär.

Skrivet av Dhanjel:

Du kan inte bidra till tex https://hay-kot.github.io/mealie/ och lägga in de saknade funktionerna?

Den har jag inte sett, såg coolt ut. Förstör ju nöjet med att bygga det själv, men då kanske jag inte svälter ihäl medan jag skriver min egna sida i alla fall!

Permalänk
Medlem

Verkar riktigt snyggt nu när jag testat en stund. Att den kan importera recept från valfri URL så bra är nästan läskigt haha.

Shoppinglistan var genuint dålig men det känns som något jag kan lösa, antigen åt mealie eller bara fulhacka in något åt mig själv. Att kombinera en befintlig lista är ju inte svårt.

Sen verkar man inte kunna skala recepten vilket är lite förvånande.

Råkade visa frugan den så nu vill hon inte att jag bygger en egen längre. Kanske får skala ned det till att laga shoppinglistan enbart.

Permalänk
Medlem

Tycker det låter som en intressant funktion, så den får du gärna lägga in i mealie