我已经放在一起来保存配方。它使用了一个表单和一个内联formset。我有用户使用含有食谱的文本文件,他们希望剪切和粘贴数据以使输入更容易。我已经计算出如何在处理原始文本输入后填充表单部分,但我无法弄清楚如何填充内联表单。Django Inline Formsets的初始数据
似乎这个解决方案几乎拼写在这里: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()如上所示我可以成功启动页面。我已经尝试了一些方法来养活的formset我已经确定,包括数量,unit_of_measure与配料:
- 设置初始数据,但不用于在线表单集
- 传入一个字典工作,但其产生的管理形式错误
- 打得四处初始化,但我有点不在我的深度有
不胜感激的任何建议。
伟大的建议亚兰,非常感谢你。我会在今天尝试这些选项。我特别喜欢有一个简单的选择... – Sinidex 2010-07-19 14:16:26
使用zip绝对的作品,我可以证实,以通常的方式保存表单也可以。正如你所指出的,我仍然需要将解析后的文本与相关的成分和度量单位相匹配,但我认为这应该是可以管理的。好的解决方案 – Sinidex 2010-07-19 17:04:26
是的,是的。这是一个很好的解决方案!我很难做到这一点。我首先研究如何构建集合中的每个表单。然后在一个表单(而不是formset)的基础上实现了初始*做*工作。在zip中,我们相信™ – Flowpoke 2015-06-05 15:14:03