I'm creating a tool to manage recipes and I'm stuck creating the
recipe entry form. Each recipe has a many-to-many database relation
with ingredients. The user needs to be able to enter an arbitrary
number of ingredients for each recipe. Each ingredient used in a
recipe must include the quantity and unit of the ingredient.

I've tried a couple of very kludgy and ineffective ways to make this
work using FORM and JavaScript, but I can't get things working. How
could I do this?

===

db.define_table("recipes",
    Field("name", notnull=True, requires=IS_NOT_EMPTY()),
    Field("description", "text", notnull=True),
    Field("servings", "integer")
)

db.define_table("ingredients",
    Field("name", notnull=True, unique=True, requires=IS_NOT_EMPTY()),
)

db.define_table("units",
    Field("name", notnull=True, unique=True, requires=IS_NOT_EMPTY())
)

db.define_table("recipes_ingredients",
    Field("recipe_id", "reference recipes", notnull=True,
requires=IS_IN_DB(db, "recipes.id", "%(name)s")),
    Field("ingredient_id", "reference ingredients", notnull=True,
requires=IS_IN_DB(db, "ingredients.id", "%(name)s")),
    Field("ingredient_num", "integer", notnull=True,
requires=IS_NOT_EMPTY()),
    Field("quantity", "double", notnull=True,
requires=[IS_NOT_EMPTY(), IS_MATCH("^\d+(/\d+)?$")]),
    Field("unit", "reference units", requires=IS_IN_DB(db, "units.id",
"%(name)s"))
)

Reply via email to