I have this monster of a if statement that I use to filter results from database, but it begs to be refactored, is there any way to make filter queries conditional on variable? I need to return recipe belonging to every category/cuisine if it has ID of "1" which is all in my DB.
if ingredients_form and any_ingredients == "1":
if category_form == "1" and cuisine_form == "1":
search_result2 = Recipe.query.filter(
Recipe._ingredients.any(Ingredient.id.in_(ingredients_form)),
~Recipe._allergens.any(Allergen.id.in_(allergens_form))
).all()
elif category_form == "1":
search_result2 = Recipe.query.filter(
Recipe._ingredients.any(Ingredient.id.in_(ingredients_form)),
~Recipe._allergens.any(Allergen.id.in_(allergens_form)),
Recipe.category_id==category_form
).all()
elif cuisine_form == "1":
search_result2 = Recipe.query.filter(
Recipe._ingredients.any(Ingredient.id.in_(ingredients_form)),
~Recipe._allergens.any(Allergen.id.in_(allergens_form)),
Recipe.cuisine_id==cuisine_form
).all()
else:
search_result2 = Recipe.query.filter(
Recipe._ingredients.any(Ingredient.id.in_(ingredients_form)),
~Recipe._allergens.any(Allergen.id.in_(allergens_form)),
Recipe.category_id==category_form,
Recipe.cuisine_id==cuisine_form
).all()
elif ingredients_form and any_ingredients == "2":
if category_form == "1" and cuisine_form == "1":
search_result2 = Recipe.query.filter(
Recipe._ingredients.any(Ingredient.id.in_(ingredients_form)),
~Recipe._allergens.any(Allergen.id.in_(allergens_form))
).all()
elif category_form == "1":
search_result2 = Recipe.query.filter(
Recipe._ingredients.any(Ingredient.id.in_(ingredients_form)),
~Recipe._allergens.any(Allergen.id.in_(allergens_form)),
Recipe.category_id==category_form
).all()
elif cuisine_form == "1":
search_result2 = Recipe.query.filter(
Recipe._ingredients.any(Ingredient.id.in_(ingredients_form)),
~Recipe._allergens.any(Allergen.id.in_(allergens_form)),
Recipe.cuisine_id==cuisine_form
).all()
else:
search_result2 = Recipe.query.filter(
Recipe._ingredients.any(Ingredient.id.in_(ingredients_form)),
~Recipe._allergens.any(Allergen.id.in_(allergens_form)),
Recipe.category_id==category_form,
Recipe.cuisine_id==cuisine_form
).all()
Aucun commentaire:
Enregistrer un commentaire