我有一个formset被设置为使用连接表。连接表 加入了一个配方表和配料表,看起来像这样django自定义ManyToMany保存模型Formset选项
class RecipeIngredient(models.Model):
'''intermediate model between Ingredient and recipe.models.recipe
for many to many'''
quantity = models.IntegerField()
measurement = models.CharField(max_length=200)
ingredient = models.ForeignKey(Ingredient)
preparation = models.CharField(max_length=100, blank=True,
null=True)
recipe = models.ForeignKey(Recipe)
我创建像这样
IngFormSet = inlineformset_factory(Recipe, RecipeIngredient,
formset=BaseIngFormSet, extra=5)
的BaseIngFormSet创建打开默认的下拉菜单 的该formset成分字段(许多与成分表),到一个 输入框,以便我可以稍后在 输入框中使用jquery-autocomplete。这将节省一些时间,用户不得不滚动长长的配料列表以供选择。
class BaseIngFormSet(BaseModelFormSet):
def add_fields(self, form, index):
super(BaseIngFormSet, self).add_fields(form,index)
form.fields["ingredient"] = forms.CharField()
我目前停留在,当表单提交 它失败,因为该成分不再在 成分表
无法分配“u'Ground的实例部分土耳其'': “RecipeIngredient.ingredient”必须是 “成分”实例。
我想我需要采取什么键入到输入框中,然后做一个 搜索就可以对成份模型类似 Ingredient.objects.get(标题=“嗒嗒”)
然后以某种方式将该对象设置为 表单集中的RecipeIngredient.ingredient,然后验证formset。可悲的是,虽然我不知道 在哪里或如何做到这一点。我尝试着进入shell并设置 formset,然后对它做一个dir(formset)以查看是否会在我的问题上遇到任何问题,但我没有提出任何问题。有没有人 有任何建议如何采取通过配料 输入的formset,并从 成分表变成一个对象? 我知道在某些时候用户可能会输入一个不在 数据库中的成分,我打算对传递的内容进行查找,如果在数据库中找不到 ,我会创建它,然后将该新对象传递给该表单组。 这是我目前在我看来,这种形式
from django.shortcuts import render_to_response, get_object_or_404,
get_list_or_404, redirect
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.forms.models import modelformset_factory,
inlineformset_factory
from models import Recipe, RecipeIngredient
from ingredient.models import Ingredient
from forms import RecipeForm, BaseIngFormSet
@login_required
def recipe(request):
IngFormSet = inlineformset_factory(Recipe, RecipeIngredient,
formset=BaseIngFormSet, extra=5)
if request.method=='POST':
form = RecipeForm(request.POST, request.FILES)
formset = IngFormSet(request.POST)
if form.is_valid() and formset:
new_recipe = form.save()
instances = formset.save(commit=False)
for instance in instances:
instance.recipe_id = new_recipe.id
instance.save()
return redirect(new_recipe.get_absolute_url())
else:
form = RecipeForm()
formset = IngFormSet(queryset=RecipeIngredient.objects.none())
return render_to_response('recipe/recipe_form.html', {'form':
form, 'formset' : formset,}, context_instance=RequestContext(request))
感谢您的帮助,您可以提供。