diff --git a/app.py b/app.py index 6f28d09..fa12574 100644 --- a/app.py +++ b/app.py @@ -429,10 +429,25 @@ def get_total_expense_for_list(list_id, start_date=None, end_date=None): def update_list_categories_from_form(shopping_list, form): - category_ids = form.getlist("categories") + raw_vals = form.getlist("categories") + candidate_ids = set() + + for v in raw_vals: + if not v: + continue + v = v.strip() + try: + candidate_ids.add(int(v)) + continue + except ValueError: + pass + + cat = Category.query.filter(func.lower(Category.name) == v.lower()).first() + if cat: + candidate_ids.add(cat.id) shopping_list.categories.clear() - if category_ids: - cats = Category.query.filter(Category.id.in_(category_ids)).all() + if candidate_ids: + cats = Category.query.filter(Category.id.in_(candidate_ids)).all() shopping_list.categories.extend(cats)