我已经整理了一个表格来保存食谱。它使用表单和内联表单集。我的用户拥有包含食谱的文本文件,他们希望剪切和粘贴数据以使输入更容易。我已经弄清楚如何在处理原始文本输入后填充表单部分,但我无法弄清楚如何填充内联表单集。
似乎解决方案几乎在这里说明了:http: //code.djangoproject.com/ticket/12213但我不能把这些部分放在一起。
我的模型:
#models.py
from django.db import models
class Ingredient(models.Model):
title = models.CharField(max_length=100, unique=True)
class Meta:
ordering = ['title']
def __unicode__(self):
return self.title
def get_absolute_url(self):
return self.id
class Recipe(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(blank=True)
directions = models.TextField()
class Meta:
ordering = ['title']
def __unicode__(self):
return self.id
def get_absolute_url(self):
return "/recipes/%s/" % self.id
class UnitOfMeasure(models.Model):
title = models.CharField(max_length=10, unique=True)
class Meta:
ordering = ['title']
def __unicode__(self):
return self.title
def get_absolute_url(self):
return self.id
class RecipeIngredient(models.Model):
quantity = models.DecimalField(max_digits=5, decimal_places=3)
unit_of_measure = models.ForeignKey(UnitOfMeasure)
ingredient = models.ForeignKey(Ingredient)
recipe = models.ForeignKey(Recipe)
def __unicode__(self):
return self.id
配方表单是使用 ModelForm 创建的:
class AddRecipeForm(ModelForm):
class Meta:
model = Recipe
extra = 0
以及视图中的相关代码(解析出表单输入的调用被删除):
def raw_text(request):
if request.method == 'POST':
...
form_data = {'title': title,
'description': description,
'directions': directions,
}
form = AddRecipeForm(form_data)
#the count variable represents the number of RecipeIngredients
FormSet = inlineformset_factory(Recipe, RecipeIngredient,
extra=count, can_delete=False)
formset = FormSet()
return render_to_response('recipes/form_recipe.html', {
'form': form,
'formset': formset,
})
else:
pass
return render_to_response('recipes/form_raw_text.html', {})
如上所述,FormSet() 为空,我可以成功启动页面。我尝试了几种方法来为表单集提供我确定的数量、unit_of_measure 和成分,包括:
- 设置初始数据,但这不适用于内联表单集
- 传递字典,但会产生管理表单错误
- 玩过init,但我在那里有点超出我的深度
任何建议都非常感谢。