我的第一个建议是采用一种简单的方法:保存
Recipe和
RecipeIngredient,然后
Recipe在制作时将结果用作您的实例
FormSet。您可能想在配方中添加一个“已审核”布尔字段,以指示表单集是否随后被用户批准。
但是,如果您出于某种原因不想走这条路,则应该能够像这样填充表单集:
我们假设您已将文本数据解析为配方成分,并具有像这样的字典列表:
recipe_ingredients = [ { 'ingredient': 2, 'quantity': 7, 'unit': 1 }, { 'ingredient': 3, 'quantity': 5, 'unit': 2 },]“成分”和“单位”字段中的数字是各个成分和度量对象的主键值。我认为您已经制定了某种方法来将文本与数据库中的成分匹配,或创建新的成分。
然后,您可以执行以下操作:
RecipeFormset = inlineformset_factory( Recipe, RecipeIngredient, extra=len(recipe_ingredients), can_delete=False)formset = RecipeFormset()for subform, data in zip(formset.forms, recipe_ingredients): subform.initial = datareturn render_to_response('recipes/form_recipe.html', { 'form': form, 'formset': formset, })这
initial会将表单集中每个表单的属性设置为
recipe_ingredients列表中的字典。在显示表单集方面,这似乎对我有用,但是我还没有尝试保存。



